是否有任何工具可以在语义级别比较.class
个文件?至少我希望看到方法签名更改(例如,我可以通过比较javap
输出获得的信息类型)以及方法本身内部的逻辑(字节码)更改,即使API未更改也是如此。该工具应该足够聪明,不报告错误警报,例如在整个方法改变位置并在同一源文件中向上或向下移动的情况下。
答案 0 :(得分:2)
我最终使用了以下bash脚本(但只检查签名)。我确信它可以改进,因为目前由于排序操作而无法使签名靠近方法本身。
#!/usr/bin/env bash
if [ $# -ne 2 ]
then
echo "usage is $0 <class A> <class B>"
else
diff <(javap -s "$1" | sort | grep -v ^$) <(javap -s "$2" | sort | grep -v ^$)
fi