Нужен инструмент для рекурсивного сравнения двух файлов .ear.

Я изменяю процесс сборки, и мне нужно выполнить полное сравнение содержимого двух файлов .ear. Это означает рекурсивное сравнение каждого архива в .ear. Эти файлы .ear имеют архивы, содержащие архивы.

Я посмотрел на Beyond Compare и Archive Analyzer, но они делают только один уровень за раз. Мне приходится вручную копаться в каждом архиве. Я ищу что-то более автоматическое.

Eclipse и UltraCompare выполняют бинарное сравнение двух .ears, чего я не хочу.

Существует ли такой инструмент?


person Dean Schulze    schedule 03.01.2011    source источник
comment
Я бы посоветовал обратиться в службу поддержки Beyond Compare. По моему опыту, они очень отзывчивы и могут помочь.   -  person TrueWill    schedule 03.01.2011


Ответы (3)


zipdiff предоставляет очень хорошее решение с открытым исходным кодом.

person Simo Nikula    schedule 08.11.2012
comment
zipdiff хорош, но не будет хорошо работать в Linux, потому что ожидаются пути MS Windows - person onknows; 09.05.2017

Моя проблема заключалась не только в рекурсивном расширении файла .ear (я написал для этого класс Java — рекурсия упростила задачу). Если изменилось что-то, кроме временных меток, я знаю, что сборка создает другой двоичный файл.

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

В дополнение к рекурсивному расширению файлов .ear мне нужно выполнить сравнение и исключить файлы .xml в определенных каталогах. Я думал, что Cygwin diff сделает это, но переключатель --exclude не распознает никакой информации о пути:

Cygwin diff не будет исключать файлов, если каталог включен в шаблон

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

У меня такое чувство, что я заново изобретаю велосипед, но я не могу найти его прямо сейчас.

person Dean Schulze    schedule 06.01.2011
comment
Как насчет использования временного репозитория Git для сравнения? Извлеките первый файл .ear и добавьте и зарегистрируйте все, извлеките второй файл .ear, теперь вы можете позволить Git выполнить сравнение. - person Max Spring; 11.08.2012
comment
Спасибо, Макс. Хороший хак. Я расширил ухо, банку и боевые модули. Проверил все файлы и использовал git diff. - person tiwari.vikash; 31.05.2016

В Beyond Compare перейдите в диалоговое окно Session Settings, а на вкладке Handling есть опция Archive Handling. Если установлено значение As folders always, BC будет обращаться с архивами точно так же, как с папками, так что это будет полностью рекурсивно.

person Zoë Peterson    schedule 03.01.2011
comment
Кажется, это заставляет его работать рекурсивно, но результата нет. Все, что я получаю, это метка времени и успешное сравнение 44410 элементов. Завершено за 35,9 секунды. Между двумя файлами .ear есть некоторые различия, но о них не сообщается. Если я углублюсь в структуру архива, он покажет файлы с различиями. Мне нужно получить отчет о различиях без необходимости вручную углубляться во все дерево. - person Dean Schulze; 03.01.2011
comment
Предполагая, что вы пишете скрипт, если вам просто нужен список файлов, используйте команду FOLDER-REPORT. Если вы хотите получить подробную информацию в файлах, используйте EXPAND ALL, SELECT DIFF.FILES NEWER.FILES OLDER.FILES ORPHAN.FILES, затем «ФАЙЛ-ОТЧЕТ». FILE/FOLDER-REPORT требуют дополнительных параметров, описанных в справке. Полученный отчет можно записать в HTML или обычный текстовый файл. - person Zoë Peterson; 04.01.2011
comment
Я не писал сценарий BC. Наконец я решил написать программу на Java для рекурсивного расширения файла .ear и всех содержащихся в нем архивов. - person Dean Schulze; 06.01.2011