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



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

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

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

  • 手动编辑:项目属性-> Java构建路径->找到scala的源代码文件夹,main和tests(通常是[Project]/src/[test/main]/scala),并编辑它们的输出文件夹为默认值以外的东西(例如[Project]/target/eclipse)
  • 添加以下指令到您的build.sbt:

     EclipseKeys.eclipseOutput := Some("target/eclipse")
    

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

作为我如何调试这个问题的提示,我在sbt中使用last compile命令来查看上次编译的日志调试信息(更多关于sbt日志)。从调试信息中,您可以找出编译器认为哪些源发生了更改,哪些源因更改而无效。结果是,当为sbt compile和ScalaIDE使用相同的输出目录时,每次其中一个脚本运行时,它们都会使对方无效。

相关内容

  • 没有找到相关文章

最新更新