Это не является прямым ответом на вопрос OP, но skuro упомянул кое-что в своем последнем абзаце, что может быть весьма полезным, то есть сделать ресурсы доступными на пути к классам во время разработки, но не включать их в релизбанка / uberjar.
Причина в том, что вы можете разместить ресурсы отдельно от jar - например, поместив файлы конфигурации в /etc
- и затем связать их с ними во время выполнения, перечислив такие папки ресурсов в classpath.
Определения в project.clj
- удалить верхний уровень
:resource-paths
из вашего project.clj; - добавить следующие строки в project.clj вверхний уровень:
:profiles {:dev {:resource-paths ["src/main/resources"]}}
Таким образом, ресурсы будут доступны на пути к классам во время разработки (компиляция, тестирование, repl), но не будут включены в выпуски jar.
В качестве альтернативы вы можете объединить некоторые ресурсы с выпуском jar, например значки приложений и графику, но не другие, например файлы конфигурации.В этом случае вы можете разделить папку ресурсов на подкаталоги и объявить те, которые хотите включить на верхнем уровне, а остальные в профиле dev
:
:resource-paths ["src/main/resources/icons"
"src/main/resources/images"]
:profiles {:dev {:resource-paths ["src/main/resources/config"]}}
Ссылка на ресурсы в коде
Используя вышеупомянутый метод, вы можете ссылаться на ресурсы как во время разработки, так и в процессе производства, просматривая их по пути к классам (как показано Кевин и Валерий ), а не непосредственно нафайловая система:
(require '[clojure.java.io :as jio])
(jio/file (jio/resource "relative/path/to/resource.xml"))
путь к классу времени выполнения
Во время разработки Leiningen будет включать ресурсы верхнего уровня и профиля dev
в путь к классам.Для выпущенной среды выполнения вам придется самостоятельно настроить путь к классам для JRE:
java -cp "/etc/myapp:/usr/local/lib/myapp.jar" myapp.core $*
Кроме того, вы также можете фактически оставить все ресурсы, включенные в jar.Таким образом, включенные ресурсы будут использоваться по умолчанию.Если вы настроили classpath так, чтобы файл .jar шел после папки конфигурации (/etc/myapp
в примере), то файлы ресурсов с таким же относительным путем к ресурсам в папке конфигурации будут иметь приоритет над файлами, включенными в jar.