Поиск различий между версиями файла класса Java

StackOverflow https://stackoverflow.com/questions/88216

  •  01-07-2019
  •  | 
  •  

Вопрос

Я работаю с большим веб-приложением Java от коммерческого поставщика.Я получил исправление от поставщика в виде нового файла .class, которое должно решить проблему, возникшую у нас с программным обеспечением.В прошлом применение патчей от этого поставщика приводило к возникновению новых и совершенно не связанных с этим проблем, поэтому я хочу понять вносимое изменение еще до того, как применять его к тестовому экземпляру.

У меня есть два файла .class рядом: один, извлеченный из текущей версии, и обновленный от поставщика. ДЖАД и JReversePro как декомпилировать, так и дизассемблировать (соответственно) две версии для получения одного и того же результата.Однако файлы .class имеют разные размеры, и я вижу различия в выводе od -x, так что они определенно не идентичны.

Какие еще шаги я могу предпринять, чтобы определить разницу между двумя файлами?


Заключение:

Спасибо за отличные ответы.С javap -c вывод также идентичен для двух файлов классов, я делаю вывод, что Давр прав, и поставщик прислал мне плацебо.По этой причине я принимаю ответ Давра, но именно Крис Маршалл и Джон Мигер подтолкнули меня к javap, так что спасибо всем троим.

Это было полезно?

Решение

Возможно, они просто скомпилировали его с новой версией Java-компилятора или с другими настройками оптимизации и т. д., так что функциональность та же, и код тот же, но выходной байт-код немного другой.

Другие советы

Если вы ищете различия в уровнях API, javap инструмент может оказаться большим подспорьем.Он выведет сигнатуры методов, которые можно будет вывести в обычные текстовые файлы и сравнить с помощью обычных инструментов сравнения.

Вы можете попробовать использовать инструмент сравнения (например, бесплатный инструмент DiffMerge от SourceGear) для декомпилированных исходников.Это должно выявить различия в файлах, хотя, скорее всего, будут выявлены «незначительные» различия, например, если в двух версиях переменные были названы по-разному.

http://www.sourcegear.com/diffmerge/

Вы можете использовать javap (в $JDK_HOME/bin) для декомпиляции файлов java .class.Он сообщит вам (например), версию файла класса, среди прочего.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top