#scala #intellij-idea #sbt
#scala #intellij-idea #sbt
Вопрос:
Я работаю с многомодульным проектом IDEA в scala.
Проект содержит 16 модулей.
Все эти модули основаны на одной и той же общей конфигурации sbt :
resourceDirectory in Compile := baseDirectory.value / "src" / "main" / "resources",
resourceDirectory in Test := baseDirectory.value / "src" / "test" / "resources",
resourceDirectory in IntegrationTest := baseDirectory.value / "src" / "it" / "resources",
Моя проблема в том, что при синхронизации проекта с IDEA 2 из 16 модулей постоянно не смогут пометить свою папку src / main / resources как resources root
, но вместо этого она будет помечена как test resources root
Я могу изменить его вручную, но каждый отдельный повторный перенос проекта будет повторно помечать их снова.
Немного покопавшись в sbt, я обнаружил, что с точки зрения sbt :
- Для всех 16 модулей src/main/resources является каталогом ресурсов для компиляции
- Для всех 16 модулей как src/main/resources, так и src/test/resources являются каталогами ресурсов для тестирования, что я нахожу немного странным, но я не уверен.
Спасибо!
Минимальный build.sbt, который покажет проблему :
import sbt.Keys.resourceDirectory
lazy val coreSettings = Seq(
organization := "C4stor",
scalaVersion := "2.12.6",
resourceDirectory in Compile := baseDirectory.value / "src" / "main" / "resources",
resourceDirectory in Test := baseDirectory.value / "src" / "test" / "resources",
resourceDirectory in IntegrationTest := baseDirectory.value / "src" / "it" / "resources"
)
lazy val `module_one` = project
.in(file("module_one"))
.settings(
coreSettings
)
.configs(IntegrationTest)
Если вы создадите фактические папки src/main/resources и src/test/resources в каталоге module_one, IDEA будет неправильно помечать src/main/resources
Комментарии:
1. Точно так же, как ваш тестовый код имеет доступ к вашему основному коду, ваш тестовый код также может получить доступ к вашим основным ресурсам.
2. Какая у вас версия sbt? Можете ли вы добавить все
build.sbt
свои и указать, какие проекты продолжают терпеть неудачу? Я бы предположил, что вы настраиваете что-то по-другому для этих 2 проектов.3. версия sbt 1.3.7 Я попытаюсь создать минимально воспроизводимый пример, поскольку фактический файл будет довольно чувствительным
4. Ну, я нашел способ исправить это, выполняя минимальный пример… Не уверен, что происходит внутри, но кажется достаточно хорошим
5. Я не думаю, что вам нужны какие-либо параметры каталога ресурсов в ваших настройках ядра. По умолчанию подмодули будут предполагать, что у вас есть подкаталог main и test. add .configs(IntegrationTest). настройки (по умолчанию. Его настройки), и у вас также будет желаемое третье местоположение src
src/it
scala-sbt.org/1.x/docs/Testing.html#Integration Tests
Ответ №1:
Каждый модуль, который имеет .configs(IntegrationTest)
, также должен иметь значения по умолчанию.Его настройки в настройках, чтобы idea правильно отображала папки ресурсов.
В приведенном примере это становится
lazy val `module_one` = project
.in(file("module_one"))
.settings(
coreSettings, Defaults.itSettings
)
.configs(IntegrationTest)