1

我有一个 .jar 文件,它代表我试图弄乱的插件。这是插件的旧版本,而新版本是由其他人编写的。我有这个较新的版本作为一个项目。

较新的项目充满了 .java 文件,而旧插件充满了 .class 文件。我可以将 jar 作为项目导入,但它仍然是所有类文件。class文件和java文件的区别不是特别大,我想看看它们之间的区别。但是,当我现在这样做时,文本比较会将 .class 文件从其在编辑器中的正常表示更改为二进制表示。我知道如果它们是相同类型的文件,我可以选择两者并点击“比较”。如何在 .class 和 .java 文件之间执行此操作,或者如何以仍然允许我比较两者的方式将一个转换为另一个?

真正最好的是,如果我有某种方法可以通过将 .class 文件转换为 .java 文件来编辑 jar。

4

3 回答 3

1

您似乎需要一个反编译器来将 Java .class 文件(字节码)转换回其原始 .java 源文件(文本)。然后你可以比较这两个文本文件。这似乎很有用:http: //java.decompiler.free.fr

于 2012-08-10T20:21:27.210 回答
1

您可以使用 SOOT (http://www.sable.mcgill.ca/soot/) 来执行此操作。有两种可能的方法:

  1. 在 SOOT 中使用 Dava 将 .class 文件反编译成 .java 文件,然后比较 .java 文件。
  2. 将 .class 和 .java 文件都转换为 SOOT 中称为 Jimple 的中间表示,并比较 Jimple 文件。

我认为第二种方法更合理,因为:

  1. 在第一种方法中,一些 Java 文件是手动开发的,而另一些是机器生成的。对它们进行比较会产生难以阅读的结果。
  2. Jimple 表示非常接近 Java 源代码并且相对容易阅读。在这种统一的机器生成格式上读取差异结果要容易得多。此外,如果您愿意,您可以将所有 Jimple 文件转换回 Java 源代码(嗯,这是第三种方法......)。
于 2012-08-10T20:32:20.357 回答
0

因为它是一个插件,所以我可以将它作为一个插件项目导入,并且有一个包含源文件夹的框。当我检查我是否可以访问 .java 代码并且能够成功区分时。

于 2012-08-13T20:38:35.490 回答