Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模块资源来源于IDEA:scala多模块项目_Scala_Intellij Idea_Sbt - Fatal编程技术网

模块资源来源于IDEA:scala多模块项目

模块资源来源于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

我正在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

每个具有
的模块。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