2011-01-03 14 views
7

Sto modificando un processo di compilazione e ho bisogno di fare un confronto completo del contenuto di due file .ear. Ciò significa ricorsivamente confrontando ogni archivio in .ear. Questi file .ear hanno archivi che contengono archivi.È necessario uno strumento per confrontare in modo ricorsivo due file .ear

Ho visto Beyond Compare e Archive Analyzer, ma fanno solo un livello alla volta. Devo eseguire il drill down manuale in ogni archivio. Sto cercando qualcosa di più automatico.

Eclipse e UltraCompare fanno un confronto binario dei due .ears che non è quello che voglio.

Esiste un tale strumento?

+0

Suggerirei di contattare il supporto di Beyond Compare. Sono molto reattivi nella mia esperienza e potrebbero essere in grado di aiutare. – TrueWill

risposta

3

Il mio problema si è rivelato non solo l'espansione del file .ear in modo ricorsivo (ho scritto una classe Java per farlo - la ricorsione lo ha reso semplice.) Una volta che i file .ear sono stati espansi, devo diffare le directory per controllare per eventuali modifiche. Se cambia qualcosa di diverso da timestamp, so che la build sta producendo un binario diverso.

Il secondo problema è che il nostro processo di generazione genera centinaia di file .xml e le generazioni successive rigenerano i file .xml con gli elementi in ordine diverso. Non sono sicuro del perché. Quando espongo due file .ear creati da build back-to-back senza modifiche a nulla, il diff delle directory risultanti mostra centinaia di file .xml con diff, anche se sono funzionalmente equivalenti.

Oltre ad espandere i file .ear in modo ricorsivo, è necessario eseguire un diff ed escludere i file .xml in determinate directory. Ho pensato che diff Cygwin farebbero questo, ma l'interruttore --exclude non riconosce alcun informazioni sul percorso:

Cygwin diff won't exclude files if a directory is included in the pattern

Se non trovo una soluzione a questo scriverò un'altra classe Java per passo attraverso l'intera struttura di directory facendo un singolo livello diff in ogni directory ed escludendo i file .xml nelle directory appropriate.

Ho la sensazione che sto reinventando la ruota, ma non riesco a trovare una ruota in questo momento.

+6

Che ne dici di utilizzare un repository Git temporaneo per eseguire la diffusione? Estrai il primo.ear file e aggiungi & check-in tutto, estrai il secondo file .ear, ora puoi lasciare che Git faccia la differenza. –

+0

Grazie Max. Bel trucco. Ho ampliato i moduli ear, jar e war. Controllato in tutti i file e usato git diff. –

1

In Beyond Compare entra nella finestra di dialogo Session Settings e nella scheda Handling è un'opzione Archive Handling. Se è impostato su As folders always BC gestirà gli archivi proprio come le cartelle, quindi è completamente ricorsivo.

+0

Sembra che funzioni in modo ricorsivo, ma non c'è uscita. Tutto ciò che ottengo è un timestamp e "Articoli con confronto 44410 completati in 35,9 secondi". Ci sono alcune differenze tra i due file .ear, ma non vengono segnalati. Se approfondisco la struttura dell'archivio, mostra file con differenze. Devo ottenere un rapporto diff senza dover eseguire manualmente il drill nell'intero albero. –

+0

Supponendo che tu stia scrivendo uno script, se vuoi solo un elenco di file usa il comando 'FOLDER-REPORT'. Se vuoi i dettagli all'interno dei file usa 'EXPAND ALL',' SELECT DIFF.FILES NEWER.FILES OLDER.FILES ORPHAN.FILES', quindi 'FILE-REPORT'. FILE/FOLDER-REPORT richiedono entrambi parametri aggiuntivi coperti nell'aiuto. È possibile scrivere il report risultante in un file HTML o di testo normale. –

+0

Non stavo scrivendo uno script BC. Ho deciso di scrivere finalmente un programma Java per espandere ricorsivamente un file .ear e tutti gli archivi in ​​esso contenuti. –

5

zipdiff fornisce un'ottima soluzione open source.

+0

zipdiff è bello ma non funzionerà bene su Linux perché sono previsti percorsi MS Windows – onknows

Problemi correlati