Gradle相同的校验和以重复构建

时间:2018-10-26 10:41:07

标签: java gradle checksum binary-reproducibility

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

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

那实际上是不可能在以后的某个时间点重新构建某个特定版本以输出相同文件的

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

是否还有其他方法可以完全省略创建档案时的时间戳元数据。还是要在创建归档文件后将其删除?

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用Gradle和想要的IIUC生成可复制的存档。 Gradle的userguide中记录了此功能。

您需要这样配置项目:

struct file *

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