1

混乱させようとしているプラ​​グインを表す.jarファイルがあります。これはプラグインの古いバージョンであり、新しいバージョンは他の誰かによって書かれました。私はこの新しいバージョンをプロジェクトとして持っています。

新しいプロジェクトは.javaファイルでいっぱいで、古いプラグインは.classファイルでいっぱいです。jarをプロジェクトとしてインポートできますが、それでもすべてのクラスファイルです。クラスファイルとJavaファイルの違いはそれほど大きくないので、違いを見てみたいと思います。ただし、ここでこれを行うと、テキストの比較により、.classファイルがエディターでの通常の表現からバイナリ表現に変更されます。同じ種類のファイルであれば、2つを選択して、[比較]をクリックできることを知っています。.classファイルと.javaファイルの間でこれを行うにはどうすればよいですか、または2つを比較できるように一方を他方に変換するにはどうすればよいですか?

本当に最善のことは、.classファイルを.javaファイルに変換することによってjarを編集する方法があればです。

4

3 に答える 3

1

必要なのは、Java .classファイル(バイトコード)を元の.javaソースファイル(テキスト)に変換する逆コンパイラーのようです。次に、2つのテキストファイルを比較できます。これは役に立つかもしれないようです:http://java.decompiler.free.fr

于 2012-08-10T20:21:27.210 に答える
1

これを行うには、SOOT(http://www.sable.mcgill.ca/soot/)を使用できます。2つのアプローチが可能です。

  1. SOOTのDavaを使用して.classファイルを.javaファイルに逆コンパイルしてから、.javaファイルを比較します。
  2. .classファイルと.javaファイルの両方をSOOTでJimpleと呼ばれる中間表現に変換し、Jimpleファイルを比較します。

2番目のアプローチの方が合理的だと思います。理由は次のとおりです。

  1. 最初のアプローチでは、一部のJavaファイルは手動で開発され、他のJavaファイルはマシンで生成されます。それらに差分をとると、読みにくい結果が作成されます。
  2. The Jimple representation is very close to Java source code and relatively easy to read. Reading a diff result on this unified, machine generated format is much easier. Also, if you want, you can convert all Jimple files back to Java source code (well, this is sort of the third approach...).
于 2012-08-10T20:32:20.357 に答える
0

Because it was a plugin, I was able to import it as a plug-in project, and there was a box to include the source folder. When I checked that I got access to the .java code and was able to diff successfully.

于 2012-08-13T20:38:35.490 に答える