2012-08-10 51 views
1

我有一个.jar文件,代表了一个插件,我试图搞砸了。这是该插件的较旧版本,而其他人则编写了较新的版本。我有这个新版本作为一个项目。Eclipse:有没有方法来区分jar和一个项目?

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

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

回答

0

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

1

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

+0

我对编译器并不是很了解,但是由于编译器的优化,它不会反编译得到不同的源代码? – 2012-08-10 20:22:22

+0

是的,有时反编译不会产生确切的原始源代码。也许你正在做的差异类型就足够了?你当然不能将字节码与原始文件进行比较。 – aquacode 2012-08-10 20:35:17

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源代码(好吧,这是第三种方法......)。
相关问题