Могу ли я использовать WinMerge для сравнения файлов * .class?

4306
RonK

Я имел обыкновение работать с ним, BeyondCompareи он мог сравнивать *.classфайлы, настраивая его для запуска декомпилятора перед сравнением.

Есть ли что-то подобное для WinMerge? Или плагин, который может сделать это вместо этого?

3

1 ответ на вопрос

7
Wayne Uroda

Я потратил день на написание плагина DLL для Winmerge, чтобы сделать это - это не самая лучшая вещь в мире, но она выполняет свою работу.

Принимает имя файла, разбивает его на каталог и имя класса, затем вызывает javap для каждого файла класса. Это довольно медленно, к сожалению (ява виноват, я бы сказал).

Я поместил DLL здесь:

http://www.locusia.com/winmerge/displayclassfiles.dll

Абсолютно нет лицензии, гарантии и т. Д. Нет троянов или viii. Я найду способ почистить источник и где-нибудь его поднять (вероятно, с людьми из проекта winmerge).

Создайте каталог «MergePlugins», где находится ваш исполняемый файл winmerge, и поместите в него dll. Он автоматически активируется в файлах * .class.

Самым сложным было выяснить, как запустить javap, программирование Windows просто ужасно.

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

О, я должен упомянуть, что вам понадобится javap на вашем пути.

РЕДАКТИРОВАТЬ: Исходный код здесь: http://www.locusia.com/winmerge/unpackjavaclassfiles%20source.7z Построен с использованием Visual Studio 2005 - Адаптировано из плагина DisplayBinaryFiles, который доступен с исходным пакетом winmerge.

Спасибо - я пропустил уведомление об этом ответе, я только что видел его сейчас. Я очень ценю ваши усилия - я буду проверять как можно скорее :) RonK 12 лет назад 0
чтобы включить автоматическую раздачу (при двойном щелчке), сделайте это (Плагины> Автоматическая распаковка) - WinMerge 2.14.0 Gary Tsui 10 лет назад 1
@GaryTsui спасибо, но я имею в виду, что в представлении списка (скажем, вы сравниваете целую папку файлов классов) он будет отображать файлы классов как разные, даже если после распаковки они идентичны. Я думаю, что это происходит потому, что они могут иметь двоичные различия (из-за перекомпиляции и т. Д.), Однако сигнатуры метода / поля не изменились. Например, при сравнении двух бинарных API вы должны вручную проверять каждый отдельный класс, когда вы дважды щелкните по нему, вы увидите «файлы идентичны» или похожи, даже если они были отмечены как разные в списке! Wayne Uroda 10 лет назад 0
отличный трюк .. ты спасаешь мою ночь :) Yajli Maclo 8 лет назад 0