Как распределить ресурсы между проектами в SBT
Проект, над которым я работаю, - это веб-приложение на Lift Framework. Мы также используем веб-плагин xsbt. Есть "основной" проект, который содержит подавляющее большинство функций; Моя текущая цель - создать два "дистрибутивных" проекта, которые добавят другой набор ресурсов classpath в "основной" проект. Проблема в том, что я либо 1) не могу запустить "дистрибутивные" проекты, либо 2) заставить их работать, но требуемого ресурса там нет.
Что я пробовал
Вот сокращенная версия моего project/Build.scala
:
lazy val core = Project("Core", file("core"))
.settings( /*some dependencies, resolvers, webSettings */ )
lazy val app1 = Project("App1", file("app1"))
.aggregate(core)
.settings( /*the same settings as core */ )
lazy val app2 = Project("App2", file("app2"))
.aggregate(core)
.settings( /*the same settings as core*/ )
Тогда в структуре каталогов для обоих app1
а также app2
У меня есть файл на src/main/resources/aFileINeed
, Основное приложение использует class.getResource
подход для загрузки файла из classpath.
Проблемы
Если я пытаюсь запустить один из проектов распространения, используя container:start
, он не обнаруживает требуемый файл в пути к классам. Кроме того, он утверждает, что src/main/webapp
это не существующий каталог (эта папка включена в основной проект, как того требует веб-плагин xsbt).
Как я могу заставить эти проекты "объединить" свои ресурсы? Я ожидал, что с помощью aggregate
или же dependsOn
в Build.scala
определение проекта будет обрабатывать это для меня, но это, очевидно, нет.
1 ответ
Это то, что я делаю. Я создаю глобальный каталог ресурсов в корне проекта, а затем следующую переменную:
lazy val globalResources = file("resources")
И тогда в настройках каждого проекта:
unmanagedResourceDirectories in Runtime += globalResources
Для проектов, которые используют xsbt-web-plugin или какую-либо другую библиотеку, которая импортирует его, вам придется использовать более сильный
unmanagedResourceDirectories in Compile += globalResources
Помните, что при использовании этого решения ваши проекты могут иметь несколько каталогов ресурсов и AFAIK, если вы определите один и тот же файл дважды compile:copy-resources
будет злиться на тебя.