2013-11-15 3 views
1

Есть ли инструменты для сравнения .class файлов на семантическом уровне? По крайней мере, я хочу видеть изменения подписи метода (например, такую ​​информацию, которую я мог бы получить, сравнив выходы javap), но также и логический (байт-код) изменяется внутри самих методов, даже когда API не изменен. Инструмент должен быть достаточно умным, чтобы не сообщать о ложных тревогах, например. в случае, когда целые методы меняются местами и перемещаются вверх или вниз в одном и том же исходном файле.Как сравнить файлы классов

+0

пытался [jd-gui] (http://jd.benow.ca/)? Возможно, это может помочь – Nishant

+1

С небольшим количеством сценариев оболочки ('javap -s',' grep', 'sort',' diff -u'), должно быть довольно легко сравнить сигнатуры методов. –

ответ

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 
Смежные вопросы