scala – 如何防止SBT重新编译修改后的.class文件?
在我们的项目中,我们对通过编译生成的.class文件进行了增强后处理.此增强步骤实际上会修改生成的.class文件,然后覆盖它.
enhance <<= enhance triggeredBy (compile in Compile) 问题是sbt有一种称为增量重新编译的机制.它监视生成的.class文件.每次增强器覆盖生成的.class文件时,sbt都会识别这些修改并在下一个编译命令中重新编译相关的源. 对我们来说,重新编译是一项非常耗时的工作.我们希望阻止sbt重新编译修改后的.class文件.这可能意味着使sbt仅监视源更改,而不是输出更改. 我做了一些搜索.但我发现了一些关于这一点的事情.现在我知道一个名为Analysis的特性可能负责从源到输出.class文件的映射.所以我向你们求助. Ps:我们可以通过将增强的输出放到另一个文件夹来解决这个问题,但不是首选. 解决方法
sbt
strongly discourages mutations to files.您应该生成不同的文件.通过这样做,您将解决您的问题,因为sbt的增量编译器仍将查看未更改的.class文件.你会做一些重新布线:
在其他地方发送编译任务的输出: classDirectory in Compile := crossTarget.value / "classes-orig" 使用您的工具处理这些.class文件,并将它们发送到crossTarget.value /“classes”(原始的classDirectory: enhance <<= enhance triggeredBy (compile in Compile) enhance := { val fromDir := (classesDirectory in Compile).value val toDir := crossTarget.value / "classes" ... } 无论如何,重新连接productDirectories以使用crossTarget.value /“classes”(否则它将在你修改的classDirectory中查找: productDirectories in Compile := Seq(crossTarget.value / "classes") 确保产品取决于您的增强任务: products in Compile <<= (products in Compile) dependsOn enhance 如果您有资源,可能需要更多重新布线(请参阅copyResources).但基本上你应该能够到达那里. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |