检测已编译的 jar 和 repo 中的代码之间的差异

Detect discrepancy between compiled jar and code in repo

我当前项目中的一个承包商有一个奇怪的习惯,即以 jars 的形式将修复程序部署到生产环境中,而不是将修复的代码推送到项目的 git 存储库中。有几十个maven项目打包成一个jar

是否有任何实用的方法来检测和绘制生产编译的 jar 和回购代码之间的所有差异?目前我可以用 IDEA 反编译一个 jar 并将结果与​​代码进行比较。反编译代码在设计上与原始代码不同,因此需要很长时间并可能导致错误。

针对您的问题的技术解决方案称为Reproducible_builds

但我认为您不需要 "blaming-game" 的技术解决方案,而是组织解决方案,例如用您自己的 jar 编译覆盖生产构建,如果出现问题则拒绝向承包商付款 re-appears

为了检测更改的 classes,我会编译代码库中的代码,并在您刚刚创建的 class 文件之间通过 class 进行二进制比较 class和生产中的。这可以很容易地自动化。

但真正的解决方案当然是:你的公司应该有一个规则,只有从官方 git 回购中提取的构建服务器(Jenkins、Bamboo 等)才能投入生产。没有例外。