【问题标题】:Modules resources root in IDEA : scala multi module projetIDEA 中的模块资源:scala multi module projet
【发布时间】: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


【解决方案1】:

每个具有.configs(IntegrationTest) 的模块也需要在其设置中具有 Defaults.itSettings 以便idea 正确映射资源文件夹。

在给出的例子中,它变成了

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

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 2011-06-14
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2019-04-11
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多