Wie vergleiche ich zwei JAR-Dateien? Beide haben .class-Dateien kompiliert.
Ich möchte den Unterschied in Bezug auf Methodenänderungen usw.
java
jar
comparison
diff
Kunal
quelle
quelle
Wenn Sie in IntellijIdea zwei Dateien auswählen und drücken
Ctrl + D
, wird der Unterschied angezeigt . Ich benutze Ultimate und weiß nicht, ob es mit der Community Edition funktioniert .quelle
quelle
jar
, um den Inhalt zu extrahieren, anstatt die Dateipkunzip
javap -c
um den Bytecode beizubehalten (insbesondere, wenn durch "Methodenänderungen" das OP Änderungen an der Signatur einer Methode bedeutete).diff
ing vonjavap
oderjad
Ausgang aus dem Gleichgewicht geraten.Ich benutze ZipDiff lib (habe sowohl Java als auch Ant API).
quelle
Extrahieren Sie jedes Glas mit dem Befehl jar mit den Parametern xvf in ein eigenes Verzeichnis. dh
jar xvf myjar.jar
für jedes Glas.Verwenden Sie dann den UNIX-Befehl
diff
, um die beiden Verzeichnisse zu vergleichen. Dies zeigt die Unterschiede in den Verzeichnissen. Sie könnendiff -r dir1 dir2
zwei Rekursionen verwenden und die Unterschiede in den Textdateien in jedem Verzeichnis (.xml, .properties usw.) anzeigen.Dies zeigt auch, ob sich Binärklassendateien unterscheiden. Um die Klassendateien tatsächlich zu vergleichen, müssen Sie sie wie von anderen angegeben dekompilieren.
quelle
In Linux / CygWin ist ein praktisches Skript, das ich manchmal verwende:
quelle
Hier ist mein Skript, um den von sje397 beschriebenen Prozess auszuführen:
Ich kann es unter Windows mit GIT für Windows ausführen. Öffnen Sie einfach eine Eingabeaufforderung. Führen Sie bash aus und führen Sie das Skript von dort aus aus.
quelle
diff -r ${EXT_DIR1} ${EXT_DIR2}
oder${DIFF} ${EXT_DIR1} ${EXT_DIR2}
(wenn Sie Ihre deklarierte Variable wiederverwenden). Für diejenigen, die auf Cygwin sind, hat das Skript fast für mich funktioniert, außer zwei Dingen, die ich geändert habe: 1) Ich musste eingebautes Javap anstelle von Jad verwenden, da ich Jad nicht herunterladen kann (enterp. Firewall ... ); 2) alsjar xf
does't Pfade verstehen wie/cygwin/c/rest/of/path
dem zurück vonpwd
in Cygwin, musste ich es konvertierenc:/rest/of/path
:JAR_DIR=${PWD}
,JAR_DIR=${JAR_DIR#*/cygdrive/c}
,JAR_DIR="c:$JAR_DIR"
jad
? Haben Sie diese Binärdatei nicht in PATHfoo/bar/toto.jar
) befinden, müssen Sie das-p
Argument zum Befehl mkdir hinzufügenVerwenden Sie Java Decompiler , um die JAR-Datei in eine Quellcodedatei umzuwandeln, und verwenden Sie dann WinMerge , um einen Vergleich durchzuführen.
Sie sollten den Inhaber des Urheberrechts des Quellcodes konsultieren, um festzustellen, ob dies in Ordnung ist.
quelle
Hier ist ein anscheinend kostenloses Tool: http://www.extradata.com/products/jarc/
quelle
Bitte versuchen Sie es mit http://www.osjava.org/jardiff/ - das Tool ist alt und die Abhängigkeitsliste ist groß. Aus den Dokumenten geht hervor, dass es sich lohnt, es zu versuchen.
quelle
Verwenden Sie den Java-Dekompiler und dekompilieren Sie alle .class-Dateien und speichern Sie alle Dateien als Projektstruktur.
Verwenden Sie dann den Meld Diff Viewer und vergleichen Sie ihn als Ordner.
quelle