web-dev-qa-db-ja.com

2つの.jarファイルの比較

2つの.jarファイルを比較するにはどうすればよいですか?どちらも.classファイルをコンパイルしています。

メソッドの変更などの点で違いが欲しい.

88
Kunal
90
linuxbuild
  1. .jarの名前を.Zipに変更
  2. エキス
  3. jad でクラスファイルを逆コンパイルします
  4. 再帰 diff
18
sje397

IntellijIdeaで2つのファイルを選択し、Ctrl + Dthenを押すと、差分が表示されます。私はUltimateを使用し、それがCommunityで動作するかどうかわかりません版。

14
xuesheng

ZipDiff libに使用します(Javaとant APIの両方があります)。

5
FoxyBOA

Jarコマンドとパラメーターxvfを使用して、各jarを独自のディレクトリに抽出します。つまり、各jarのjar xvf myjar.jar

次に、UNIXコマンドdiffを使用して、2つのディレクトリを比較します。これにより、ディレクトリの違いが表示されます。 diff -r dir1 dir2 2つの再帰を使用して、各ディレクトリ(.xml、.propertiesなど)のテキストファイルの違いを表示できます。

これは、バイナリクラスファイルが異なる場合にも表示されます。クラスファイルを実際に比較するには、他の人が述べたようにそれらを逆コンパイルする必要があります。

4
Brian

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
2
SidJ

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

GIT for Windowsを使用してWindowsで実行できます。コマンドプロンプトを開くだけです。 bashを実行し、そこからスクリプトを実行します。

2
skanga

Java Decompiler を使用してjarファイルをソースコードファイルに変換し、次に WinMerge を使用して比較を実行します。

ソースコードの著作権者に相談して、そうするかどうかを確認する必要があります。

1
Cheok Yan Cheng

http://www.osjava.org/jardiff/ を試してください-ツールが古く、依存関係リストが大きい。ドキュメントからは、試してみる価値があるようです。

0
Jayan

これは明らかに無料のツールです http://www.extradata.com/products/jarc/

0
Tom

Java decompiler を使用して、すべての.classファイルを逆コンパイルし、すべてのファイルをプロジェクト構造として保存します。

次に、meld diffビューアを使用して、フォルダとして比較します..

0
Dulip Chandana