現在、大規模なプロジェクト(約2,000のソースファイル)用のビルドシステムをすべて再作成する過程にあります。ファイルのバイナリ比較を行い、すべてが正しいことを確認します。次の質問:javac
の出力は、コンパイル全体で同じであることが保証されているのですか、それとも変更される可能性がありますか?javacで生成されるクラスファイルは常に同じですか?
Another questionは、定数プールの順序が異なる可能性があることを暗示していますが、javac
コールに入るファイルの順序を制御できると仮定すると、まだ違いがありますか? AntとMavenをビルドの一部として使用しています。
保証されません。実際には、同一のコンパイラとコンパイル時のJAR構造を使用すると、おそらくは同じになりますが、JARの順序などを少し変更してもapplecartが動揺する可能性があります。 –
あなたのテストでは機能的な等価性が保証されないでしょうか?それはあなたが実際に心配しているものですか?いずれにせよ、それを試してみて、何が起こるかを見てみましょう。あなたがものが並べ替えられたことが分かった場合は、バイトコードに相当するかどうかを確認するためにバイトコード分析を行います。 –
ビルドされたクラスのバイナリ比較がなぜ必要なのでしょうか? –