Корневые ресурсы модулей в IDEA: многомодульный проект scala

#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)