【发布时间】:2017-01-26 00:29:12
【问题描述】:
我使用 jar 命令来构建 jar 文件。在尝试使用 md5 签名缓存 jar 文件时,我发现从完全相同的源构建的 jar 具有不同的 md5 签名。
经过仔细检查,我发现每次创建 jar 时内容都完全相同(diff -qr 为空)。事实证明,创建的时间戳是在 jar 文件中编码的,它会抛出 md5 签名。其他人也发现了相同的here。
甚至还有一个blog post 介绍如何每次使用 maven 创建相同的 jar 文件。但是,我想要一个使用命令行的简单解决方案,使用 jar 和 zip 等现成的命令(可能必须在没有安装权限的服务器上执行此操作),可能导致与我目前使用的“功能”jar 相同jar 命令。
编辑: 就我的目的而言,快速 找到 md5 就足够了,这样它在构建中是相同的,即使 jar 并不相同。到目前为止,我发现的唯一方法是提取 jar 中的文件并 md5 所有组件文件。但我担心对于更大的罐子来说这很慢,并且会破坏缓存它们以避免首先构建它们的目的。有没有更好更快的解决方案?
【问题讨论】:
-
因此,如果您要将源代码编译到 jar 中,为什么不简单地执行一次,然后执行 xcopy 命令或不复制该 jar。
-
为什么拥有位相同的容器很重要?
-
问题是,我正在尝试缓存 jar - 一个 jar 是使用多个源(java 文件、其他 jar)构建的。为了确定是否需要构建特定的 jar,计算所有源 java 文件和 jar 的 md5。组件 jar 会在没有缓存的情况下重新构建,当这种情况发生时,它们的 md5 会发生变化,这会导致更大 jar 的缓存失效。
-
这听起来像是在重新发明 Maven 和 Gradle。
-
你是对的。这是具有自己的构建系统的项目的一部分。我只是研究它的人之一,对于它本质上是对 maven 的彻底改造这一事实无能为力。