IntelliJ 的 Scala 增量编译什么时候发生?我注意到对文件进行更改不会导致相应的 .class 文件(在 /target 中)被更新。这什么时候发生?
1 回答
我认为您误解了 Scala 增量编译的工作原理。
有两种不同的东西可以称为“IntelliJ 的 Scala 增量编译”:
1)适当的 Scala 增量编译,这或多或少是一组适用于不同编程语言的典型策略,当您点击编译按钮时,不会再次从头开始(重新)编译所有内容。其背后的主要思想是构建系统可能会注意到某些文件及其所有依赖项自上次编译以来没有改变,因此您不必重新编译它们,而是可以使用上次编译的结果。对于 Scala 来说,这些启发式方法实际上很复杂,因为它是一种复杂的语言。SBT 文档“了解增量重新编译”中描述了一些关于可以做什么的想法. 在某些时候,JetBrains 认为它们更聪明并实施了他们的启发式算法,并且声称它们更好(即增量编译更快),所以现在您在 Scala 编译器设置下选择基于 SBT 和基于 Idea 的增量编译。但它仍然只在您点击编译(或运行或调试或类似的东西)时才有效。这不是Idea在后台做的事情。
2) IntelliJ Idea 有另一件特定的事情,它也需要一种增量重新编译,而且这个工作几乎是实时的。这是由 Idea 的 Scala 插件实现的语法高亮功能,它需要立即重新处理您更改的所有文件,但现在与真正的编译器所做的完全相同。实际上,您不应该研究该过程的细节(除非您要自己开发 Scala 插件)。这些过程提供的是代码的一些语法结构,而不是实际的.class
文件。