查找Java类文件版本之间的差异
我正在使用来自商业供应商的大型Java Web应用程序。我已经从供应商那里收到了一个新的.class文件形式的补丁,该补丁应该可以解决我们在软件方面遇到的问题。过去,从该供应商那里购买补丁程序会导致出现新的,完全不相关的问题,因此我想了解所做的更改,甚至在将其应用于测试实例之前也是如此。
我并排有两个.class文件,一个是从当前运行的版本中提取的文件,另一个是从供应商处更新的文件。 JAD和JReversePro都将两个版本分别反编译和反汇编为相同的输出。但是,.class文件的大小不同,我看到的是od -x输出的差异,因此它们绝对不相同。
我还可以采取什么其他步骤来确定两个文件之间的差异?
结论:
感谢好评。由于两个类文件的javap -c输出也相同,因此我将得出结论,Davr的权利和供应商向我发送了安慰剂。由于这个原因,我接受Davr的回答时,是Chris Marshall和John Meagher才使我开始使用Javap,所以感谢你们三个。
解决方案
他们可能只是使用新版本的Java编译器或者不同的优化设置等对其进行了编译,因此功能相同,代码相同,但是输出字节码略有不同。
我们可以尝试在反编译的源代码上使用差异工具(例如SourceGear的免费DiffMerge工具)。尽管应该会拾取"无关紧要的"差异,例如,如果在两个版本中变量的名称不同,那应该可以拾取文件的差异。
http://www.sourcegear.com/diffmerge/
我们可以使用javap(在$ JDK_HOME / bin中)来反编译java .class文件。它会告诉我们(例如)类文件的版本
如果我们在寻找API级别差异,那么javap工具可能会很有帮助。它将输出方法签名,这些签名可以输出到纯文本文件,并使用常规的diff工具进行比较。