Как загрузить программные ресурсы в Clojure

Как вы загружаете программные ресурсы, такие как значки, строки, графические элементы, сценарии и т. Д. В программе Clojure? Я использую макет проекта, похожий на тот, что используется во многих Java-проектах, где есть каталог «resources», висящий над каталогом «source». JAR-файл создается из исходного кода и включает в себя ресурсы, но я не могу загрузить ресурсы, как в Java.

Первое, что я попробовал, было что-то вроде

(ClassLoader/getSystemResource "resources/myscript.js")

Но никогда не мог найти ресурс.

Вы можете сделать что-то подобное с

...
  (let [cls (.getClass net.mydomain.somenamespace)
        strm (.getResourceAsStream cls name)        ]
...

где имяname ресурса для загрузки, но потокnil.

Вы можете попробовать использовать загрузчик класса контекста с чем-то вроде

...

(let [thr (Thread/currentThread)
      ldr (.getContextClassLoader thr)
      strem (.getResourceAsStream ldr name)]
...

Ноstrem всегда ноль.

В отчаянии я попытался разместить файлы ресурсов практически в каждом каталоге программы. Они правильно копируются в банку, но я все еще не могу их загрузить.

Я посмотрел на языковые источники дляload функция и библиотека времени выполнения, но я не "получаю" это.

Любая помощь будет оценена.

РЕДАКТИРОВАТЬВот более конкретный пример. В Java, если вы хотите конвертировать MarkDown в HTML, вы можете использоватьshowdown.js Сценарий и напишите что-то вроде:

package scriptingtest;

import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Example {

    private Object converter;

    public String transformMarkDown(String markdownString) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        try {
            engine.eval(new InputStreamReader(getClass().getResourceAsStream(
                    "resources/showdown.js")));
            converter = engine.eval("new Showdown.converter()");
        } catch (Exception e) {
            return "Failed to create converter";
        }
        try {
            return ((Invocable) engine).invokeMethod(converter, "makeHtml",
                    markdownString).toString();
        } catch (Exception e) {
            return "Conversion failed";
        }
    }

    public static void main(String[] args) {
        System.out.println(new Example().transformMarkDown("plain, *emphasis*, **strong**"));
    }
}

когда я создаю проект, все это компилируется и упаковывается в банку. При запуске программа выводит<p>plain, <em>emphasis</em>, <strong>strong</strong></p>

Дословный перевод Clojure кажется довольно простым, но я сталкиваюсь с проблемами, пытаясь создатьInputStreamReader - Я не могу написать код, необходимый для поиска файла сценария в банке.

редактировать: Добавлен тэг "markdown", поскольку в посте приведены два полных примера подходов к обработке markdown

Ответы на вопрос(4)

Ваш ответ на вопрос