如何防止SBT重新编译修改后的.class文件?

Che*_*nyu 5 scala sbt incremental-compiler

在我们的项目中,我们对通过编译生成的.class文件进行了增强后处理.此增强步骤实际上会修改生成的.class文件,然后覆盖它.

enhance <<= enhance triggeredBy (compile in Compile)
Run Code Online (Sandbox Code Playgroud)

问题是sbt有一种称为增量重新编译的机制.它监视生成的.class文件.每次增强器覆盖生成的.class文件时,sbt都会识别这些修改并在下一个编译命令中重新编译相关的源.

对我们来说,重新编译是一项非常耗时的工作.我们希望阻止sbt重新编译修改后的.class文件.这可能意味着使sbt仅监视源更改,而不是输出更改.

我做了一些搜索.但我发现了一些关于这一点的事情.现在我知道一个名为Analysis的特性可能负责从源到输出.class文件的映射.所以我向你们求助.

Ps:我们可以通过将增强的输出放到另一个文件夹来解决这个问题,但不是首选.

Che*_*nyu 2

我说过 sbt 监视输出 .class 文件。当修改 .class 文件时,它会重新编译 .class 文件的源代码。

经过一番研究,我们发现 sbt 通过文件的最后修改时间来通知文件的修改。也就是说,我们可以通过修改后回滚上次修改时间来欺骗sbt ,这样sbt就不会察觉到任何变化。

因此,我们的解决方案很简单但有效:

  1. 查找所有 .class 文件
  2. 记下他们的最后修改时间
  3. 做增强
  4. 恢复原来的最后修改时间

这是一个小技巧。我们仍然期待更强大的解决方案。