gpt4 book ai didi

java - 确定性地创建 .jar 文件(每次都相同)

转载 作者:搜寻专家 更新时间:2023-11-01 03:47:47 25 4
gpt4 key购买 nike

我使用 jar 命令构建 jar 文件。在尝试使用 md5 签名缓存 jar 文件时,我发现从完全相同的源构建的 jar 具有不同的 md5 签名。
仔细检查后,我发现每次创建 jar 时,内容都完全相同(diff -qr 为空)。事实证明,创建的时间戳被编码在 jar 文件中,这会丢弃 md5 签名。其他人也发现了相同的 here .

甚至还有一个blog post关于如何每次使用 Maven 创建相同的 jar 文件。但是,我想要一个简单的解决方案,使用命令行使用现成的命令,例如 jar 和 zip(可能必须在没有安装权限的服务器上执行此操作),可能导致与我当前使用的相同的“功能”jar jar命令。

编辑:为了我的目的,快速找到 md5 就足够了,这样它在构建中是相同的,即使 jars 不相同。到目前为止我发现的唯一方法是提取 jar 中的文件并对所有组件文件进行 md5。但恐怕对于更大的 jar 来说速度很慢,并且会破坏缓存它们以避免首先构建它们的目的。有没有更好更快的解决方案?

最佳答案

主要问题是 jar 命令总是使用当前时间创建 META-INF\MANIFEST.MF。文件时间保存在 zip 条目标题中。这就是为什么即使 jar 中的所有文件内容保持不变,MD5 值也不同的原因:不同的 zip 条目标题会产生不同的 zip 文件。

对于 jar 命令,唯一的解决方案是选项 -M:不为条目创建 list 文件。

关于java - 确定性地创建 .jar 文件(每次都相同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554146/

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