zipdiff beyond java jar comparison diff

java - beyond - Comparando dos archivos.jar



beyond compare (11)

  1. Cambiar el nombre de .jar a .zip
  2. Extraer
  3. Descompilar archivos de clase con jad
  4. Dif Recursivo

¿Cómo comparo dos archivos .jar? Ambos han compilado archivos .class.

Quiero la diferencia en términos de cambios de método, etc.


Aquí está mi script para hacer el proceso descrito por sje397:

#!/bin/sh # Needed if running on Windows FIND="/usr/bin/find" DIFF="diff -r" # Extract the jar (war or ear) JAR_FILE1=$1 JAR_FILE2=$2 JAR_DIR=${PWD} # to assign to a variable TEMP_DIR=$(mktemp -d) echo "Extracting jars in $TEMP_DIR" EXT_DIR1="${TEMP_DIR}/${JAR_FILE1%.*}" EXT_DIR2="${TEMP_DIR}/${JAR_FILE2%.*}" mkdir ${EXT_DIR1} cd ${EXT_DIR1} jar xf ${JAR_DIR}/${JAR_FILE1} jad -d . -o -t2 -safe -space -b -ff -s java -r **/*.class cd .. mkdir ${EXT_DIR2} cd ${EXT_DIR2} jar xf ${JAR_DIR}/${JAR_FILE2} jad -d . -o -t2 -safe -space -b -ff -s java -r **/*.class cd .. # remove class files so the diff is clean ${FIND} ${TEMP_DIR} -name ''*.class'' | xargs rm # diff recursively

Puedo ejecutarlo en Windows usando GIT para Windows. Simplemente abra un símbolo del sistema. Ejecuta bash y luego ejecuta el script desde allí.



En Linux / CygWin una práctica secuencia de comandos que uso a veces es:

#Extract the jar (war or ear) cd dir1 jar xvf jar-file1 for i in `ls *.class` do javap $i > ${i}.txt #list the functions/variables etc done cd dir2 jar xvf jar-file2 for i in `ls *.class` do javap $i > ${i}.txt #list the functions/variables etc done diff -r dir1 dir2 #diff recursively


Extraiga cada jar a su propio directorio usando el comando jar con los parámetros xvf. es decir, ''jar xvf myjar.jar'' para cada jar.

Luego, use el comando diff de UNIX para comparar los dos directorios. Esto mostrará las diferencias en los directorios. Puede usar ''diff -r dir1 dir2'' dos recurse y mostrar las diferencias en los archivos de texto en cada directorio (.xml, .properties, etc.).

Esto también mostrará si los archivos de clase binarios son diferentes. Para comparar realmente los archivos de clase, tendrá que descompilarlos como lo anotaron otros.


Por favor, intente http://www.osjava.org/jardiff/ - la herramienta es antigua y la lista de dependencias es grande. De los documentos, parece que vale la pena intentarlo.


Si selecciona dos archivos en IntellijIdea y presiona Ctrl + D , le mostrará la diferencia. Uso Ultimate y no sé si funcionará con Community Edition.


Utilice Java Decompiler para convertir el archivo jar en archivo de código fuente y luego use WinMerge para realizar la comparación.

Debe consultar al titular de los derechos de autor del código fuente para ver si está bien hacerlo.


Utilizo ZipDiff lib (tengo Java y Ant API).


utilice el descompilador de Java y descompile todos los archivos .class y guarde todos los archivos como estructura de proyecto.

luego usa meld diff viewer y compáralo como carpetas.