SBT和Scala-IDE中的同步增量编译

时间:2014-03-26 12:16:30

标签: scala sbt scala-ide

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

1 个答案:

答案 0 :(得分:3)

对我来说,运行ScalaIDE和sbt~compile同时运行时的问题原因是,ScalaIDE和sbt都使用相同的输出目录进行编译。这意味着他们覆盖了彼此编译的类,并将其检测为已更改,从而导致新的完全重新编译,而不是使用增量编译。

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

  • 手动编辑:项目属性 - > Java构建路径 - >找到两个,主要和测试(通常是[project] / src / [test / main] / scala)的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使用相同的输出目录时,每次运行时它们都会相互失效。