【发布时间】:2020-10-02 07:27:33
【问题描述】:
我正在使用 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 中挖掘了一下之后,我发现从 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)
如果你在 module_one 目录下创建了实际的 src/main/resources 和 src/test/resources 文件夹,IDEA 会错误地标记 src/main/resources
【问题讨论】:
-
和你的测试代码可以访问你的主代码一样,你的测试代码也可以访问你的主资源。
-
你的 sbt 版本是多少?你能添加你的整个
build.sbt并指定哪些项目一直失败吗?我猜你为这两个项目配置了一些不同的东西。 -
sbt 版本是 1.3.7 我将尝试生成一个最小的可重现示例,因为实际文件会非常敏感
-
好吧,我在做最小的例子时找到了一种修复方法......虽然不确定里面发生了什么,但似乎足够好
-
我认为您不需要 coreSettings 中的任何资源目录参数。默认情况下,子模块将假定您有一个主目录和测试子目录。添加 .configs(IntegrationTest).settings(Defaults.itSettings) ,您将拥有所需的第三个 src 位置
src/it以及 scala-sbt.org/1.x/docs/Testing.html#Integration+Tests
标签: scala intellij-idea sbt