比较两个.jar 文件

如何比较两个.jar 文件? 它们都有编译过的.class 文件。

I want the difference in terms of method changes, etc.

163320 次浏览

使用 Java 反编译器将 jar 文件转换为源代码文件,然后使用 WinMerge执行比较。

您应该咨询源代码的版权所有者,看看这样做是否合适。

  1. 将.jar 重命名为. zip
  2. 撤离
  3. Jad反编译类文件
  4. 递归 diff

Here's an aparently free tool http://www.extradata.com/products/jarc/

使用带有 xvf 参数的 jar 命令将每个 jar 解压缩到它自己的目录中。

Then, use the UNIX command diff to compare the two directories. This will show the differences in the directories. You can use diff -r dir1 dir2 two recurse and show the differences in text files in each directory(.xml, .properties, etc).

这也将显示二进制类文件是否不同。要实际比较类文件,您必须按照其他人的说明反编译它们。

请尝试 http://www.osjava.org/jardiff/-工具是旧的,依赖性列表是大的。从文件来看,值得一试。

我使用 ZipDiff lib (同时具有 Java 和 ant API)。

在 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

use Java 反编译器 and decompile all the .class files and save all files as project structure .

then use meld diff viewer and compare as folders ..

下面是执行 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}

我可以使用 GIT 在 Windows 上运行它。只要打开一个命令提示符。运行 bash,然后从那里执行脚本。

如果你在 IntellijIdeas中选择两个文件,然后按 Ctrl + D,它会显示差异。我使用 太棒了,不知道它是否会与 社区版本的工作。

创建 a folder 并在其中创建 另外两个文件夹,就像旧的和新的一样。向文件夹中添加相关的 jar 文件。然后使用 IntelliJ 打开第一个文件夹。之后,点击任何2个文件,你想要比较和 右击和点击 compare archives

这个应用程序可能是你所需要的,工作良好,并显示一个简单的图形用户界面显示差异

如果使用 IntelliJ IDEA 或 Android Studio,请将 jar 文件添加到 libs 文件夹下的项目中。 然后选择这两个 jar 文件,右键单击然后选择“ 比较档案