java - Сравнение двух файлов.jar




comparison diff (10)

Я использую ZipDiff lib (имеет как Java, так и ant API).

Как сравнить два .jar-файла? Оба они скомпилировали файлы .class.

Я хочу разницу в терминах изменений метода и т. Д.


В 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

Извлеките каждую банку в свой собственный каталог, используя команду jar с параметрами xvf. т.е. «jar xvf myjar.jar» для каждой банки.

Затем используйте команду diff для сравнения двух каталогов. Это покажет различия в каталогах. Вы можете использовать «diff -r dir1 dir2» две рекурсии и показать различия в текстовых файлах в каждом каталоге (.xml, .properties и т. Д.).

Это также покажет, отличаются ли файлы двоичных классов. Чтобы фактически сравнить файлы классов, вам придется декомпилировать их, как отмечают другие.


Если вы выберите два файла в IntellijIdea и нажмите Ctrl + D тогда он покажет вам diff. Я использую Ultimate и не знаю, будет ли он работать с изданием Community .


Вот мой сценарий для выполнения процесса, описанного 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

Я могу запустить его в Windows с помощью GIT для Windows. Просто откройте командную строку. Запустите bash, а затем выполните сценарий оттуда.


использовать декомпилятор java и декомпилировать все файлы .class и сохранять все файлы в качестве структуры проекта.

затем используйте meld diff viewer и сравните их как папки.


  1. Переименуйте .jar в .zip
  2. экстракт
  3. Декомпилировать файлы классов с jad
  4. Рекурсивный diff


Попробуйте http://www.osjava.org/jardiff/ - инструмент старый, и список зависимостей большой. Из документов, похоже, стоит попробовать.


При увеличении времени вы должны вернуться в UTC, а затем добавить или вычесть. Используйте локальное время только для отображения.

Таким образом, вы сможете пройти через любые периоды, когда часы или минуты происходят дважды.

Если вы конвертировали в UTC, добавьте каждую секунду и конвертируйте в локальное время для отображения. Вы бы прошли через 11:54:08 вечера LMT - 11:59:59 вечера LMT, а затем 11:54:08 вечера CST - 11:59:59 вечера КНТ.





java jar comparison diff