为了账号安全,请及时绑定邮箱和手机立即绑定

用于重复构建的 Gradle 相同校验和

用于重复构建的 Gradle 相同校验和

largeQ 2021-12-10 10:13:54
我正在用 gradle 构建一个 Java 项目,并希望将校验和文件与我的构建工件一起发布。问题在于重复构建会生成不同的校验和,而无需更改任何代码。花了一些时间追查问题,原因很明显:生成的类文件获得创建时间的创建/修改时间戳(很棒的发现!!)此修改日期作为元数据添加到生成的 jar/zip 存档中,从而导致校验和差异也就是说,实际上不可能在稍后的时间点重新构建将输出相同文件的某个版本。我认为通过在创建后将工件的修改/创建日期更改为某个默认值来“修复”这个问题非常容易。但这会导致档案中以某种方式出现奇怪的元数据信息 - 有些东西1970-01-01T00:00:00Z很明显,但乍一看仍然令人困惑。有没有其他方法可以在创建档案时完全省略时间戳元数据。或者在创建档案后将其删除?或者是否有其他方法可以使重复构建生成相同的工件?我实际上想知道这种情况的最佳实践是什么?!
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

您可以使用 Gradle 和 IIUC 生成可重现的档案,这正是您想要的。该功能在摇篮的记录userguide。


您需要像这样配置您的项目:


tasks.withType(AbstractArchiveTask) {

    preserveFileTimestamps = false

    reproducibleFileOrder = true

}

看起来甚至有一个插件可以为您配置,尽管它似乎不再处于活动状态:https : //github.com/Johni0702/gradle-reproducible-builds-plugin


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号