Comment comparer deux fichiers .jar? Tous deux ont compilé des fichiers .class.
Je veux la différence en termes de changements de méthode, etc.
java
jar
comparison
diff
Kunal
la source
la source
Si vous sélectionnez deux fichiers dans IntellijIdea et appuyez sur,
Ctrl + D
il vous montrera le diff. J'utilise Ultimate et je ne sais pas si cela fonctionnera avec l' édition communautaire .la source
la source
jar
pour extraire le contenu, au lieu de renommer le fichier et de l'utiliserpkunzip
.)javap -c
pour le conserver au bytecode (surtout si par "method changes" l'OP signifiait des changements dans la signature d'une méthode).diff
ingjavap
ou lajad
sortie.J'utilise pour ZipDiff lib (j'ai à la fois Java et ant API).
la source
Extrayez chaque fichier jar dans son propre répertoire à l'aide de la commande jar avec les paramètres xvf. c'est à dire
jar xvf myjar.jar
à- pour chaque pot.Ensuite, utilisez la commande UNIX
diff
pour comparer les deux répertoires. Cela montrera les différences dans les répertoires. Vous pouvez utiliserdiff -r dir1 dir2
deux recurse et afficher les différences dans les fichiers texte dans chaque répertoire (.xml, .properties, etc.).Cela montrera également si les fichiers de classe binaire diffèrent. Pour comparer réellement les fichiers de classe, vous devrez les décompiler comme indiqué par d'autres.
la source
Voici mon script pour faire le processus décrit par sje397:
Je peux l'exécuter sur Windows en utilisant GIT pour Windows. Ouvrez simplement une invite de commande. Exécutez bash, puis exécutez le script à partir de là.
la source
diff -r ${EXT_DIR1} ${EXT_DIR2}
ou${DIFF} ${EXT_DIR1} ${EXT_DIR2}
(si vous réutilisez votre variable déclarée). Pour ceux qui sont sur cygwin, le script a presque fonctionné pour moi, sauf deux choses que j'ai changées: 1) J'ai dû utiliser javap intégré au lieu de jad, car je ne peux pas télécharger jad (enterp. Firewall ... ); 2)jar xf
does't comprendre des chemins comme/cygwin/c/rest/of/path
qui est retourné parpwd
dans Cygwin, je devais le convertir enc:/rest/of/path
:JAR_DIR=${PWD}
,JAR_DIR=${JAR_DIR#*/cygdrive/c}
,JAR_DIR="c:$JAR_DIR"
jad
? Ne pas avoir ce binaire disponible dans PATHfoo/bar/toto.jar
Si vos arguments (fichiers jar) sont dans un sous-répertoire (comme ), vous devez ajouter l'-p
argument à la commande mkdirDans Linux / CygWin, un script pratique que j'utilise parfois est:
la source
Utilisez Java Decompiler pour transformer le fichier jar en fichier de code source, puis utilisez WinMerge pour effectuer la comparaison.
Vous devriez consulter le détenteur des droits d'auteur du code source, pour voir s'il est acceptable de le faire.
la source
utiliser le décompilateur java et décompilez tous les fichiers .class et enregistrez tous les fichiers en tant que structure de projet.
puis utilisez meld diff viewer et comparez en tant que dossiers.
la source
Voici un outil totalement gratuit http://www.extradata.com/products/jarc/
la source
Veuillez essayer http://www.osjava.org/jardiff/ - l'outil est ancien et la liste de dépendances est longue. D'après la documentation, cela vaut la peine d'essayer.
la source