IDEA中的模块资源根源:scala多模块项目

时间:2020-10-02 07:27:33

标签: scala intellij-idea sbt

我正在使用Scala中的多模块IDEA项目。

该项目包含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同步项目时,这16个模块中的2个将始终无法将其src / main / resources文件夹标记为resources root,而是将其标记为test resources root

我可以手动更改它,但是项目的每次重新导入都会再次对其进行标记。

经过一番挖掘,我发现从sbt的角度来看:

  • 对于所有16个模块,src / main / resources是Compile的资源目录
  • 对于所有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)

如果在module_one目录中创建实际的src / main / resources和src / test / resources文件夹,则IDEA将错误地标记src / main / resources

1 个答案:

答案 0 :(得分:1)

每个具有.configs(IntegrationTest)的模块也都需要在其设置中包含Defaults.itSettings,以使想法正确地映射资源文件夹。

在给出的示例中,它变为

lazy val `module_one` = project
  .in(file("module_one"))
  .settings(
    coreSettings, Defaults.itSettings
  )
  .configs(IntegrationTest)