将.java文件与.class文件进行比较

时间:2016-04-07 14:41:14

标签: java jar .class-file

在我的情况下,我从构建过程中创建了许多.jar个文件。在进行任何调试之前,我想要一种方法来快速验证我的.java来源与.class中找到的.jar是否匹配。

我认为如果我解压缩.jar并找到与.class文件匹配的.java,那么我应该能够确定它们在功能上是否相同。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

首先要意识到的是,编译并不仅仅是为正在编译的类使用特定的.java文件。编译器还使用编译时可用的其他.java和.class文件中的信息。例如,它可以内联静态最终常量。此外,方法重载等内容取决于已定义的方法。

话虽如此,如果使用与以前相同的编译器编译相同的源文件,您可能会获得相同或类似的类文件。但是,即使使用相同的源文件,不同的编译器(javac vs eclipse)和不同版本的编译器也会产生不同的结果。

因此,我建议首先尝试编译所有内容并查看类文件是否匹配。如果类文件不匹配,请尝试使用Krakatau反汇编程序对它们进行反汇编,并在反汇编程序上进行差异以查看差异。这将帮助您查看差异是否不重要(例如常量池的重新排序)或字节码是否有实质性更改。

答案 1 :(得分:1)

您可以使用像http://jd.benow.ca/这样的java反编译器,以便能够查看类文件的相应来源,然后您就可以将它与您的java文件进行比较

答案 2 :(得分:1)

如果你可以使用反编译器,也许这对你来说已经足够了?像IntelliJ IDE中的一个,看看你编译类的来源是怎样的。您甚至可以对反编译的源进行调试。