#!/bin/bash if [ $# != 2 ] ; then echo "Syntax: $0 name1.jar name2.jar" exit fi
if diff $1 $2 ; then echo Files are identical exit 0 fi work=$(mktemp -d) mkdir -p "$work/a" mkdir -p "$work/b" cwd="$(pwd)" cd "$work/a" unzip "$cwd/$1" | sort > "$work/a.list" cd "$work/b" unzip "$cwd/$2" | sort > "$work/b.list" cd "$work" if ! diff a.list b.list > diff.list ; then echo "Contents"; echo =====; cat diff.list; echo ""; echo "Contents are different" > summary; fi for class in $(find a -name \*.class | sed -e "s:^\\a/::;s:\\.class$::;s:/:.:g"); do javap -c -classpath a $class > a.javap; javap -c -classpath b $class > b.javap; if ! diff a.javap b.javap > diff.javap ; then echo $class; echo =====; cat diff.javap; echo ""; echo $class >> summary; fi; done if [ -f summary ]; then echo "Summary" echo "=======" cat summary else echo "File contents are identical" fi cd "$cwd" rm -rf "$work"