IntelliJ反复忘记目标src_managed是源目录

时间:2017-07-12 19:21:21

标签: scala intellij-idea

我正在使用IntelliJ 2017.1旗舰版。我正在开发一个scala项目,我使用SBT生成一些代码。

将代码复制到target / scala-2.11 / src_managed文件夹中。

一次又一次,我的编译失败了,我发现IntelliJ忘记了src_managed是源目录

enter image description here

如果我右键单击src_managed文件夹并将目标标记为源根目录,则编译成功。但令人非常恼火的是,IntelliJ一次又一次地忘记了,这是一个源目录。

2 个答案:

答案 0 :(得分:0)

由于某种原因,当您将"main"添加到源路径并在src_managed/main中创建源时,Intellj会选择它:

.settings(
  (sourceGenerators in Compile) += (codeGen in Compile),
  (codeGen in Compile) := {
    val r = (runner in Compile).value
    val s = streams.value.log
    // This is [basedir]/target/scala-2.11/src_managed
    val sourcePath = sourceManaged.value
    val classPath = (fullClasspath in Test in `generator`).value.map(_.data)

    // This is [basedir]/target/scala-2.11/src_managed/main
    val fileDir = new File(sourcePath, "main").getAbsoluteFile
    r.run(
     "com.github.integration.CodeGeneratorRunner",
      classPath, Seq(fileDir.getAbsolutePath), s
    )
  )
)

...然后intellj捡起来!

Intellij Picks It Up

我不知道如何,我不知道为什么,但是确实如此。 SBT以任何一种方式工作。也许有一些我们不知道的SBT约定,也许是Intellij的错误。

答案 1 :(得分:0)

偶然发现这个问题,因为我遇到了同样的问题。虽然这个问题很老,但我会用我的解决方案来回答其他可能遇到同样问题的人。

将目录添加为 build.sbt 中的托管源目录:

Compile / managedSourceDirectories += baseDirectory.value / "target/scala-2.13/src_managed"

// or if you have your scala version in a value/variable
lazy val scalaVersion = "2.13.3"
Compile / managedSourceDirectories += baseDirectory.value / s"target/scala-${"""[\d]*[\.][\d]*""".r.findFirstIn(scalaVersion).get}/src_managed"