当我尝试使用SBT命令行和
Scala-IDE中的同一项目时,以相同的方式(即仅从命令行或仅从IDE)构建多次允许以递增方式重建项目.但是,如果我在SBT中编译项目,我注意到它必须在IDE中完全重建(反之亦然).有什么办法可以避免吗?如果重要,Eclipse项目将使用sbteclipse从SBT生成.
解决方法
对我来说,同时运行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中的最后一个编译命令来查看上次编译(more about logging in sbt)的已记录调试信息.从调试信息中,您可以找到编译器认为哪些源更改以及哪些源由更改无效.事实证明,当使用sbt compile和ScalaIDE的相同输出目录时,每次运行时它们都会相互失效.