두 개의 .jar 파일을 어떻게 비교합니까? 둘 다 .class 파일을 컴파일했습니다.
방법 변경 등의 차이를 원합니다.
답변
-
JAPICC , 샘플 사용법 :
japi-compliance-checker OLD.jar NEW.jar
log4j에 대한 샘플 보고서 : http://abi-laboratory.pro/java/tracker/timeline/log4j/
-
PkgDiff , 샘플 사용법 :
pkgdiff OLD.jar NEW.jar
args4j에 대한 샘플 보고서 를 참조하십시오 .
-
Clirr , 샘플 사용법 :
java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar
답변
IntellijIdea 에서 두 개의 파일을 선택 하고를 누르면 Ctrl + D
차이점이 표시됩니다. Ultimate를 사용하는데 Community Edition에서 작동할지 모르겠습니다 .
답변
답변
나는 ZipDiff lib (Java와 ant API가 모두 있음)를 사용합니다.
답변
매개 변수 xvf와 함께 jar 명령을 사용하여 각 jar를 자체 디렉토리에 추출하십시오. 즉 jar xvf myjar.jar
, 각 항아리에 대해.
그런 다음 UNIX 명령 diff
을 사용하여 두 디렉터리를 비교합니다. 이것은 디렉토리의 차이점을 보여줍니다. diff -r dir1 dir2
두 개의 재귀 를 사용 하여 각 디렉토리 (.xml, .properties 등)에서 텍스트 파일의 차이점을 표시 할 수 있습니다 .
이진 클래스 파일이 다른 경우에도 표시됩니다. 실제로 클래스 파일을 비교하려면 다른 사람이 언급 한대로 디 컴파일해야합니다.
답변
다음은 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
${DIFF} ${EXT_DIR1} ${EXT_DIR2}
Windows 용 GIT를 사용하여 Windows에서 실행할 수 있습니다. 명령 프롬프트를여십시오. bash를 실행 한 다음 거기에서 스크립트를 실행하십시오.
답변
Linux / CygWin에서 가끔 사용하는 편리한 스크립트는 다음과 같습니다.
#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