gpt4 book ai didi

java - Gradle 重复构建时使用相同的校验和

转载 作者:行者123 更新时间:2023-11-30 02:00:31 27 4
gpt4 key购买 nike

我正在使用 gradle 构建一个 Java 项目,并希望将校验和文件与我的构建工件一起发布。问题在于,重复构建会生成不同的校验和,而无需更改任何代码。花了一些时间追查问题后,原因很明显:

  1. 生成的类文件会获得创建时间的创建/修改时间戳(伟大的发现!!)
  2. 此修改日期作为元数据添加到生成的 jar/zip 存档中,从而导致校验和差异

也就是说,实际上不可能在以后的某个时间点重新构建某个版本来输出相同的文件。

我认为通过将工件创建后的修改/创建日期更改为某个默认值来“修复”此问题非常容易。但这会导致文件中出现某种奇怪的元数据信息 - 类似 1970-01-01T00:00:00Z 的内容非常明显,但乍一看仍然令人困惑。

是否有任何其他方法可以完全省略创建文件时的时间戳元数据。或者在创建文件后将其删除?

或者是否有其他方法可以使重复构建生成相同工件?

我实际上想知道这种情况的最佳实践是什么?!

最佳答案

您可以使用 Gradle 生成可重现的文件,而 IIUC 这就是您想要的。此功能记录在 Gradle 的 userguide 中.

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

tasks.withType(AbstractArchiveTask) {
preserveFileTimestamps = false
reproducibleFileOrder = true
}

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

关于java - Gradle 重复构建时使用相同的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53006925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com