当我尝试使用SBT命令行和Scala-IDE中的同一项目时,以相同的方式(即仅从命令行或仅从IDE)构建多次允许以增量方式重建项目。但是,如果我在SBT中编译项目,我注意到它必须在IDE中完全重建(反之亦然)。有什么办法可以避免吗?如果重要,Eclipse项目将使用sbteclipse从SBT生成。
答案 0 :(得分:3)
对我来说,运行ScalaIDE和sbt~compile同时运行时的问题原因是,ScalaIDE和sbt都使用相同的输出目录进行编译。这意味着他们覆盖了彼此编译的类,并将其检测为已更改,从而导致新的完全重新编译,而不是使用增量编译。
要修复它,请更改其中一个编译器的输出目录,执行以下操作之一:
将以下指令添加到build.sbt
:
EclipseKeys.eclipseOutput := Some("target/eclipse")
两者都会将ScalaIDE编译器的编译输出目录更改为[project]/target/eclipse
,其中project
应该是项目目录的实际名称。
作为我如何调试此问题的提示,我在sbt中使用last compile
命令查看上次编译(more about logging in sbt)的已记录调试信息。从调试信息中,您可以找到编译器认为哪些源更改以及哪些源由更改无效。事实证明,当为sbt compile和ScalaIDE使用相同的输出目录时,每次运行时它们都会相互失效。