比较两个.jar文件

时间:2010-10-06 00:44:30

标签: java jar comparison diff

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

我希望在方法更改等方面有所不同。

12 个答案:

答案 0 :(得分:86)

答案 1 :(得分:18)

  1. 将.jar重命名为.zip
  2. 提取
  3. 使用jad
  4. 反编译类文件
  5. 递归diff

答案 2 :(得分:12)

如果您在 IntellijIdea 中选择两个文件并按Ctrl + D,则会显示差异。我使用 Ultimate 并且不知道它是否适用于社区版本。

答案 3 :(得分:5)

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

答案 4 :(得分:4)

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

然后,使用UNIX命令diff比较两个目录。这将显示目录中的差异。您可以使用diff -r dir1 dir2两个递归并显示每个目录(.xml,.properties等)中文本文件的差异。

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

答案 5 :(得分:4)

创建一个文件夹并在其中创建另外两个文件夹,就像新旧一样。将相关的 jar 文件添加到文件夹中。然后使用 IntelliJ 打开第一个文件夹。然后点击您想要比较的任意 2 个文件,然后右键点击并点击比较档案

答案 6 :(得分:2)

在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

答案 7 :(得分:2)

这是我的脚本,用于执行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 for Windows运行它。只需打开命令提示符。运行bash,然后从那里执行脚本。

答案 8 :(得分:1)

使用Java Decompiler将jar文件转换为源代码文件,然后使用WinMerge进行比较。

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

答案 9 :(得分:0)

这是一个非常免费的工具http://www.extradata.com/products/jarc/

答案 10 :(得分:0)

请尝试http://www.osjava.org/jardiff/ - 工具已过时且依赖关系列表很大。从文档来看,它看起来值得尝试。

答案 11 :(得分:0)

使用java decompiler并反编译所有.class文件并将所有文件保存为项目结构。

然后使用meld diff viewer并比较为文件夹..