当我尝试从 SBT 命令行和 Scala-IDE 使用同一个项目时,以相同的方式多次构建(即仅从命令行或仅从 IDE)允许以增量方式重建项目。但是,如果我在 SBT 中编译项目,我注意到它必须在 IDE 中完全重建(反之亦然)。有什么办法可以避免吗?如果重要的话,Eclipse 项目是使用 sbteclipse 从 SBT 生成的。

最佳答案

对我来说,同时运行 ScalaIDE 和 sbt ~compile 的问题是事实证明,ScalaIDE 和 sbt 使用相同的输出目录进行编译。这意味着它们会覆盖彼此编译的类,并将检测到它们发生了变化,从而导致新的完全重新编译,而不是使用增量编译。

要修复它,请执行以下操作之一更改其中一个编译器的输出目录:

  • 手动编辑:项目属性 -> Java 构建路径 -> 找到 main 和测试的 scala 源文件夹(通常是 [project]/src/[test/main]/scala)并将它们的输出文件夹编辑为其他文件夹默认值(例如到 [project]/target/eclipse)
  • 将以下指令添加到您的 build.sbt 中:
     EclipseKeys.eclipseOutput := Some("target/eclipse")
    

  • 两者都会将 ScalaIDE 编译器的编译输出目录更改为 [project]/target/eclipse ,其中 project 应该是项目目录的实际名称。

    作为我如何调试这个问题的提示,我在 sbt 中使用了 last compile 命令来查看上次编译 ( more about logging in sbt ) 记录的调试信息。从调试信息中,您可以找出编译器认为已更改的源以及因更改而无效的源。事实证明,当对 sbt compile 和 ScalaIDE 使用相同的输出目录时,它们每次运行时都会相互无效。

    关于scala - SBT 和 Scala-IDE 中的同步增量编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22660762/

    10-11 23:10
    查看更多