加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:54:55 所属栏目:安全 来源:网络整理
导读:在我们的项目中,我们对通过编译生成的.class文件进行了增强后处理.此增强步骤实际上会修改生成的.class文件,然后覆盖它. enhance = enhance triggeredBy (compile in Compile) 问题是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).但基本上你应该能够到达那里.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读