【问题标题】:When does IntelliJ's Scala incremental compilation happen?IntelliJ 的 Scala 增量编译什么时候发生?
【发布时间】:2017-03-28 18:38:06
【问题描述】:

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

【问题讨论】:

    标签: scala intellij-idea incremental-compiler


    【解决方案1】:

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

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

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

    2) IntelliJ Idea 有另一件特定的事情,它也需要一种增量重新编译,并且几乎可以实时工作。这是由 Idea 的 Scala 插件实现的语法高亮功能,它需要立即重新处理您更改的所有文件,但现在与真正的编译器所做的完全相同。实际上,您不应该研究该过程的细节(除非您要自己开发 Scala 插件)。这些过程提供的是代码的一些语法结构,而不是实际的.class 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 2014-05-04
      • 2010-12-04
      • 1970-01-01
      • 2014-08-08
      • 2017-08-03
      相关资源
      最近更新 更多