2012-08-10 50 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源代碼(好吧,這是第三種方法......)。
相關問題