2016-04-07 10 views
0

私の状況では、.jar個のファイルがビルドプロセスから作成されています。デバッグを行う前に、.javaソースが.classと一致し、.jarにあることをすぐに確認する方法が必要です。.javaファイルと.classファイルの比較

.jarを解凍して.javaファイルと一致する.classを見つけたら、機能的に同じかどうかを判断できるはずです。

どうすればいいですか?

+0

これはあなたを助けるかもしれません:http://stackoverflow.com/questions/27024792/is-there-a-way-to-unpack-jars-in-runtime-and-access-methods-of-classes – Gendarme

+0

あなたは、 d。パックされたクラスと比較するための.javaファイルの.classを参照する必要があります – Aaron

答えて

2

最初に気づくべきことは、コンパイルでは、コンパイルされるクラスに特定の.javaファイルを使用するだけではないことです。コンパイラは、コンパイル時に利用できる他の.javaファイルと.classファイルの情報も使用します。たとえば、静的最終定数をインライン展開することができます。また、メソッドオーバーロードのようなものは、どのメソッドが定義されているかによって異なります。

つまり、前と同じコンパイラで同じソースファイルをコンパイルすると、同じ、または非常に似たクラスファイルが得られるでしょう。しかし、同じソースファイルであっても、異なるコンパイラ(javacとeclipse)と異なるバージョンのコンパイラが異なる結果を生成します。

私がお勧めするのは、まずすべてをコンパイルして、クラスファイルが一致するかどうかを確認することです。クラスファイルが一致しない場合は、Krakatau逆アセンブラでそれらを逆アセンブルし、その違いを確認するためにdiassembliesをdiffしてみてください。これは、違いが重要でないか(定数プールの並べ替えなど)、またはバイトコードの実質的な変更があるかどうかを確認するのに役立ちます。

1

あなたは、あなたがあれば多分それはあなたのために十分だろうあなたのjavaファイルと

+0

これはおそらく私がやるルートです。私は視覚的に検証するのではなく、何かを自動化することを望んでいました。 – flakes

+1

@flkes AFAIKデコンパイラが提供する結果が、ソースコードにあるものとまったく同じものではないため、デコンパイルを自動化しようとしていても自動化する方法はありません。任意のjavadocを持つ –

+0

多分私はクラスパスとして.jarを使用して.javaファイルをコンパイルし、.classファイルを比較できますか? – flakes

1

を、それを比較することができます。あなたのクラスファイルの対応するソースを表示できるようにするために、http://jd.benow.ca/のようなJavaの逆コンパイラを使用することができますあなたは逆コンパイラを使うことができますか? IntelliJ IDEのように、コンパイルされたクラスのソースがどのようになっているかを確認してください。逆コンパイルされたソースでデバッグすることさえできます。

関連する問題