IntelliJ 的 Scala 增量编译什么时候发生?

When does IntelliJ's Scala incremental compilation happen?

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

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

有 2 种不同的东西可以称为 "IntelliJ's Scala incremental compilation ":

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

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