我们公司有一个巨大的应用程序,它是用它的源代码(实际上几乎所有源代码)购买的,我们一直在努力调整它以适应我们的需求、修复等......很久以前有人决定的方式编译该项目的一个好方法是拥有原始公司的预编译 jar,并且仅在 Override 文件夹中编辑或添加我们需要的类,该文件夹是我们从带有原始源代码的一些 zip 文件中获得的。因此,当我们编译时,我们只编译我们编辑的类,使用 Classpath 中的原始 jar,然后将我们新的或编辑的类与原始 jar 连接以创建一个新的 Jar。
问题似乎在于人们正在更改方法契约、编辑接口并将抽象方法添加到抽象类。当我们编译时,我们不会重新编译完整的源代码,只重新编译我们的源代码,因此编译器只检查我们的 Overrided 源代码的合约一致性。我开始注意到这件事似乎正在破坏,因为旧类试图调用一个不再存在的方法,或者调用类的方法的类实现了真正只是接口的部分版本。
我不能简单地将原始源代码与我们覆盖的源代码相结合,因为某些类和 java 文件是在构建时自动生成的,所以我可能会意外修复一些真正没有损坏的东西。(我试过了,这就是我知道的原因)
有没有办法自动验证各种已编译 jar 类之间的合同一致性?在解决了这些问题后,我将能够将两个源目录合并在一起,并在将来避免这个问题。