我有一个使用内置 Eclipse“编译”任务编译的应用程序。然后我决定将构建过程移到 Ant 的 javac
中,结果文件变小了。
后来我发现将调试级别调整为 "vars,lines,source"
我可以嵌入与 Eclipse 相同的调试信息,并且在很多情况下文件保持完全相同的大小但是内部布局不同。因此,我无法使用 md5sum 签名来确定它们是否是完全相同的版本。
除了调试信息,2 个本应相同的文件得到不同内部布局或大小的原因可能是什么?
如何比较编译后的 .class 文件?
最佳答案
对于诸如常量池条目(基本上是所有符号信息)的顺序以及每个字段/方法/类的属性之类的东西,没有必需的顺序。不同的编译器可以自由地按照他们想要的任何顺序写出。
您可以比较已编译的类,但您需要深入研究类文件结构并对其进行解析。有一些库可以做到这一点,比如 BCEL或 ASM ,但我不能 100% 确定他们会帮助您完成您想做的事情。
关于java - 哪些设置会影响已编译的 java .class 文件的布局?你怎么知道两个编译类是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644320/