¿Cómo comparo dos archivos .jar? Ambos han compilado archivos .class.
Quiero la diferencia en términos de cambios de método, etc.
java
jar
comparison
diff
Kunal
fuente
fuente
Si selecciona dos archivos en IntellijIdea y presiona
Ctrl + D
, se le mostrará la diferencia. Utilizo Ultimate y no sé si funcionará con la edición Community .fuente
fuente
jar
para extraer el contenido, en lugar de cambiar el nombre del archivo y usarlopkunzip
).javap -c
para mantenerlo en código de bytes (especialmente si por "cambios de método" el OP significa cambios en la firma de un método).diff
ingjavap
o lajad
salida.Utilizo ZipDiff lib (tengo Java y ant API).
fuente
Extraiga cada jar a su propio directorio usando el comando jar con los parámetros xvf. es decir,
jar xvf myjar.jar
para cada frasco.Luego, use el comando UNIX
diff
para comparar los dos directorios. Esto mostrará las diferencias en los directorios. Puede usardiff -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 clases binarios difieren. Para comparar realmente los archivos de clase, tendrá que descompilarlos como lo indicaron otros.
fuente
Aquí está mi script para hacer el proceso descrito por sje397:
Puedo ejecutarlo en Windows usando GIT para Windows. Simplemente abra un símbolo del sistema. Ejecute bash y luego ejecute el script desde allí.
fuente
diff -r ${EXT_DIR1} ${EXT_DIR2}
o${DIFF} ${EXT_DIR1} ${EXT_DIR2}
(si reutiliza su variable declarada). Para aquellos que están en cygwin, el script casi funcionó para mí, excepto dos cosas que cambié: 1) Tuve que usar javap integrado en lugar de jad, porque no puedo descargar jad (enterp. Firewall ... ); 2) comojar xf
does't entender caminos como la/cygwin/c/rest/of/path
que se devuelvepwd
en cygwin, tuve que convertirlo ac:/rest/of/path
:JAR_DIR=${PWD}
,JAR_DIR=${JAR_DIR#*/cygdrive/c}
,JAR_DIR="c:$JAR_DIR"
jad
? No tengo ese binario disponible en PATHfoo/bar/toto.jar
), debe agregar el-p
argumento al comando mkdirEn Linux / CygWin, un script útil que utilizo a veces es:
fuente
Use Java Decompiler para convertir el archivo jar en un archivo de código fuente y luego use WinMerge para realizar la comparación.
Debe consultar al propietario de los derechos de autor del código fuente para ver si está bien hacerlo.
fuente
utilice el decompilador de Java y descompile todos los archivos .class y guarde todos los archivos como estructura de proyecto.
luego use el visor de diferencias de meld y compare como carpetas.
fuente
Aquí hay una herramienta aparentemente gratuita http://www.extradata.com/products/jarc/
fuente
Intente http://www.osjava.org/jardiff/ - la herramienta es antigua y la lista de dependencias es grande. Según los documentos, parece que vale la pena intentarlo.
fuente