有没有可靠的方法来比较两个.jar文件?

有没有可靠的方法来比较两个.jar文件?,jar,diff,Jar,Diff,我正在努力改进我们的开发过程。作为其中的一部分,当开发人员需要重新部署某些服务作为测试其更改的一部分时,我希望通过只重新部署那些实际已更改的服务来改进我们的流程—也就是说,正在运行的胖jar有任何源代码更改 由于我们目前没有一个复杂的版本控制方案,不幸的是,这不是一个选项 我最初的想法如下: 为当前正在运行的上一个部署保存JAR或其哈希列表。 重新部署后,首先组装所有相关罐。对生成的jar文件执行md5sum,并与当前文件进行比较。如果匹配,则将其添加到不会重新部署的排除列表中。 如果哈希不匹配

我正在努力改进我们的开发过程。作为其中的一部分,当开发人员需要重新部署某些服务作为测试其更改的一部分时,我希望通过只重新部署那些实际已更改的服务来改进我们的流程—也就是说,正在运行的胖jar有任何源代码更改

由于我们目前没有一个复杂的版本控制方案,不幸的是,这不是一个选项

我最初的想法如下:

为当前正在运行的上一个部署保存JAR或其哈希列表。 重新部署后,首先组装所有相关罐。对生成的jar文件执行md5sum,并与当前文件进行比较。如果匹配,则将其添加到不会重新部署的排除列表中。 如果哈希不匹配,请重新部署。 不幸的是,经过相当多的搜索和尝试,我发现即使是两个具有完全相同的源和资源内容的jar也会产生不同的校验和:这是因为jar只是一个美化的zip,因此,它确实具有指示日期的文件头。不幸的是,这意味着一个简单的md5sum first.jar second.jar将永远无法工作


有没有标准的方法来解决这个问题?如果可能的话,我希望避免将内容提取到某个临时目录中,并将这些内容与可能要重新部署的服务数量进行比较,我最终可能不会节省太多时间。

解决此问题的方法是让我们的构建工具管理比较,而不是自己尝试。我们在构建服务器上保存了以前的构建信息,并简单地重建了项目——在本例中,Gradle注意到哪些JAR是最新的,哪些不是最新的

在此之后,我们简单地比较了前一个构建和当前构建的校验和,这两个构建现在正确地说明了哪些JAR被真正更新

编辑:

截至2019年5月28日,在不依赖保存的构建信息的情况下,很容易获得可复制的Spring Boot JAR构建。参见要点以及其中链接的弹簧