模块资源来源于IDEA:scala多模块项目
我正在scala的一个多模块IDEA项目中工作 该项目包含16个模块 所有这些模块都基于相同的通用sbt配置:模块资源来源于IDEA:scala多模块项目,scala,intellij-idea,sbt,Scala,Intellij Idea,Sbt,我正在scala的一个多模块IDEA项目中工作 该项目包含16个模块 所有这些模块都基于相同的通用sbt配置: resourceDirectory in Compile := baseDirectory.value / "src" / "main" / "resources", resourceDirectory in Test := baseDirectory.value / "src" / "t
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进行了一些挖掘之后,我发现从sbt的角度来看:
- 对于所有16个模块,src/main/resources是用于编译的资源目录
- 对于所有16个模块,src/main/resources和src/test/resources都是测试的资源目录,我觉得有点奇怪,但我不确定
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每个具有
的模块。configs(IntegrationTest)
也需要具有默认值。其设置中的itSettings才能使IDEA正确映射资源文件夹
在给出的示例中,它变为
lazy val `module_one` = project
.in(file("module_one"))
.settings(
coreSettings, Defaults.itSettings
)
.configs(IntegrationTest)
与您的测试代码访问主代码的方式相同,您的测试代码也可以访问您的主要资源。您的sbt版本是什么?您能否添加整个
build.sbt
,并指定哪些项目一直失败?我猜你为这两个项目配置了不同的东西。sbt版本是1.3.7,我将尝试生成一个最小的可复制示例,因为实际文件将非常敏感。好吧,我在执行最小示例时找到了一种修复方法。。。虽然不确定里面发生了什么,但看起来不错,因为我认为coreSettings中不需要任何资源目录参数。默认情况下,子模块将假定您有一个main和test子目录。添加.configs(IntegrationTest).settings(Defaults.itSettings),您还将拥有所需的第三个src位置src/it