106 votes

Comparaison de deux fichiers .jar

Comment comparer deux fichiers .jar ? Ils contiennent tous deux des fichiers .class compilés.

Je veux connaître la différence en termes de changements de méthode, etc.

106voto

aponomarenko Points 6966

0 votes

Andrey, quelle est la différence entre ces outils ? Sont-ils issus du même noyau ?

3 votes

@NikolayKuznetsov, non, ces outils ont un noyau différent. pkgdiff - comparaison visuelle des déclarations de classes, japi-compliance-checker et clirr - analyse des changements (le premier est écrit en perl, le second - en java).

0 votes

Avez-vous essayé d'intégrer quelque chose avec TeamCity ? Il semble que clirr ait un plugin Maven et qu'il existe également un outil appelé JAPI-Checker.

20voto

sje397 Points 23619
  1. Renommer .jar en .zip
  2. Extrait
  3. Décompiler les fichiers de classe avec jad
  4. Récursif diff

2 votes

C'est de la force brute, mais c'est exactement la façon dont je le ferais. (Sauf que je pourrais utiliser jar pour extraire le contenu, au lieu de renommer le fichier et d'utiliser la fonction pkunzip .)

2 votes

Vous pouvez remplacer l'étape 3 par un appel à javap -c pour s'en tenir au bytecode (surtout si par "modifications de méthode", le PO entendait des modifications de la signature d'une méthode).

0 votes

Comment gérer les corps de méthode qui sont déplacés vers le haut ou vers le bas du fichier source ? Je pense que cela jetterait le diff de l javap ou jad la sortie est déréglée.

8voto

Brian Points 6625

Extrayez chaque 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 entre les deux répertoires. Vous pouvez utiliser diff -r dir1 dir2 Deux récursions et affichage des différences dans les fichiers texte de chaque répertoire (.xml, .properties, etc).

Cela montrera également si les fichiers de classe binaires sont différents. Pour comparer réellement les fichiers de classe, vous devrez les décompiler, comme l'ont fait remarquer d'autres personnes.

5voto

FoxyBOA Points 3334

J'avais l'habitude de ZipDiff lib (ont à la fois l'API Java et ant).

2voto

Cheok Yan Cheng Points 11825

Utilisez Décompilateur Java pour transformer le fichier jar en fichier de code source, et ensuite utiliser WinMerge pour effectuer la comparaison.

Vous devez consulter le détenteur du droit d'auteur du code source pour savoir si vous pouvez le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X