IntelliJ的Scala增量编译何时发生?

时间:2017-03-28 18:38:07

标签: scala intellij-idea incremental-compiler

IntelliJ的Scala增量编译何时发生?我注意到对文件进行更改不会导致更新相应的.class文件(在/ target中)。这是什么时候发生的?

1 个答案:

答案 0 :(得分:2)

我认为您误解了Scala增量编译的工作原理。

有两种不同的东西可称为“IntelliJ的Scala增量编译”:

1)正确的Scala增量编译,或多或少是一组适用于不同编程语言的典型策略,以便在点击“编译”按钮时不再(重新)从头开始编译所有内容。这背后的主要思想是构建系统可能会注意到自上次编译以来某些文件及其所有依赖项没有改变,因此您不必重新编译它们,而是可以使用上次编译的结果。这些启发式算法实际上对Scala来说很复杂,因为它是一种复杂的语言。关于可以做些什么的一些想法在SBT文件"Understanding Incremental Recompilation"中有所描述。在某些时候,JetBrains决定他们更智能并实现他们的启发式设置并且他们声称它们更好(即增量编译更快)所以现在您在Scala编译器设置下选择基于SBT和基于Idea的增量编译。但它仍然只有在你点击编译(或运行或调试或类似的东西)时才有效。这不是Idea在后台做的事情。

2)还有一个特定于IntelliJ Idea的东西,它还需要一种增量重新编译,这个几乎可以实时工作。这是由Idea的Scala插件实现的synxtax突出显示功能,它需要立即重新处理您更改的所有文件,其方式类似,但现在与真正的编译器完全相同。实际上,您不应该查看该过程的详细信息(除非您要开发Scala插件本身)。这些过程提供的是代码的一些语法结构,但不是实际的.class文件。