【问题标题】:Gradle same checksum for repeated build为重复构建 Gradle 相同的校验和
【发布时间】:2019-03-31 02:35:25
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: java gradle checksum binary-reproducibility


    【解决方案1】:

    您可以使用 Gradle 生成可重现的存档,而 IIUC 正是您想要的。此功能记录在 Gradle 的 userguide 中。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多