どのようにして同じJavaソースがコンパイルされてバイナリ異なるクラスファイルにコンパイルされるのか説明できますか?同じJavaソースがバイナリ異なるクラスにコンパイル
質問は、以下のような状況から生じる:
私たちは、分枝状されたかなり大規模なアプリケーション(800+クラス)、その後、再構築バックトランクに再統合を持っています。再統合の前に、私たちはトランクをブランチにマージしました。これは標準的な手順です。
最終的な結果は、ブランチソースとトランクソースを持つ一連のディレクトリを持つ一連のディレクトリです。 Beyond Compareを使用すると、両方のソースセットが同一であると判断できました。しかし、IntelliJ v11でホストされているmavenを使用してコンパイルすると(と同じJDK)、クラスファイルが数十程度異なることに気付きました。
明らかに異なるクラスファイルの各ペアのソースを逆コンパイルすると、同じJavaソースになってしまいました。その結果、最終結果の点では問題にはならないようです。しかし、ファイルのいくつかだけが違うのはなぜですか?
ありがとうございました。
追加の思考:
のmaven/javacのは、異なる順序でファイルをコンパイルした場合、それが最終結果に影響を与える可能性がありますか?
異なるjdkバージョン?私は最適化がバージョンによって異なるかもしれないと思います。 – RNJ
javap -c -v(感謝Peter Lawrey)とBeyond Compare(偉大なツール、それが大好き!)を使用してそれぞれの出力を見ると、私はStephen Cさん(感謝スティーブンC)の項目5が答えの一部を与えることを確認できます。いくつかのケースでは、プールの順番が異なります。しかし、クラスパスが両方で同じであることは確かですが、コンパイルの順序は異なるかもしれません。 – Vicki