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



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

我想你误解了Scala增量编译的工作原理。

有2种不同的东西可以称为"IntelliJ的Scala增量编译":

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

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

最新更新