Momentan sind wir dabei, unser gesamtes Build-System für ein großes Projekt (etwa 2000 Quelldateien) neu zu schreiben, und es wurde von einem binären Vergleich der Dateien gesprochen, um sicherzustellen, dass alles korrekt ist folgende Frage: Ist die Ausgabe von javac
garantiert, dass sie bei Kompilationen gleich ist oder könnte sie sich ändern?Ist die von javac generierte Klassendatei immer gleich?
Another question implizierten, dass der Konstanten-Pool eine andere Reihenfolge haben könnte, aber unter der Annahme, die wir für die Reihenfolge der Dateien gehen in den javac
Anruf wird es noch ein Potential für Unterschiede zu steuern, sind in der Lage? Wir verwenden Ant und Maven als Teil des Builds, wenn dies auch die Dinge beeinflussen könnte.
Nicht garantiert. In der Praxis wäre es wahrscheinlich identisch, wenn Sie den identischen Compiler und die JAR-Struktur zur Kompilierung verwenden, aber selbst geringfügige Änderungen an der JAR-Reihenfolge usw. könnten den Applecart stören. –
Würden Ihre Tests nicht die * funktionale * Äquivalenz gewährleisten, worüber Sie eigentlich besorgt sind? Auf jeden Fall, warum nicht einfach versuchen und sehen, was passiert? Wenn Sie feststellen, dass der Inhalt neu geordnet wurde, müssen Sie eine Byte-Code-Analyse durchführen, um festzustellen, ob sie trotzdem Byte-Code-äquivalent sind. –
Wundern Sie sich wirklich, warum sollten Sie einen binären Vergleich der gebauten Klassen machen müssen? –