Как распределить ресурсы между проектами в 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 будет злиться на тебя.

Другие вопросы по тегам