2011-01-03 112 views
7

Estoy modificando un proceso de compilación y necesito hacer una comparación completa del contenido de dos archivos .ear. Eso significa comparar recursivamente cada archivo en el .ear. Estos archivos .ear tienen archivos que contienen archivos.Necesito una herramienta para comparar dos archivos .ear recursivamente

He consultado Beyond Compare y Archive Analyzer, pero solo hacen un nivel a la vez. Tengo que profundizar manualmente en cada archivo. Estoy buscando algo más automático.

Eclipse y UltraCompare hacen una comparación binaria de los dos .ears que no es lo que quiero.

¿Existe una herramienta de este tipo?

+0

Sugiero contactar con el soporte de Beyond Compare. Son muy receptivos en mi experiencia, y pueden ser capaces de ayudar. – TrueWill

Respuesta

3

Mi problema resultó ser algo más que simplemente expandir el archivo .ear recursivamente (escribí una clase de Java para hacer eso - la recursividad lo hizo simple.) Una vez que los archivos .ear se expanden tengo que modificar los directorios para verificar para cualquier cambio Si cambia algo más que marcas de tiempo, entonces sé que la compilación está produciendo un binario diferente.

El segundo problema es que nuestro proceso de compilación genera cientos de archivos .xml y las compilaciones posteriores vuelven a generar esos archivos .xml con los elementos en orden diferente. No estoy seguro por qué. Cuando amplío dos archivos .ear realizados por compilaciones consecutivas sin cambios en nada, la diferencia de los directorios resultantes muestra cientos de archivos .xml con diffs, aunque sean funcionalmente equivalentes.

Además de expandir los archivos .ear de forma recursiva, necesito hacer un diff y excluir los archivos .xml en ciertos directorios. Pensé que diff Cygwin harían esto, pero el interruptor --exclude no reconoce ninguna información de ruta:

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

Si no encuentro una solución a este Voy a escribir otra clase Java para recorrer toda la estructura del directorio haciendo un diff de un solo nivel en cada directorio y excluyendo los archivos .xml en los directorios apropiados.

Tengo la sensación de que estoy reinventando la rueda, pero no puedo encontrar una rueda en este momento.

+6

¿Qué le parece usar un repositorio temporal de Git para hacer el difusor? Extraiga el primero.archivo ear y agregar y registrar todo, extraer el segundo archivo .ear, ahora puede dejar que Git lo diferencie. –

+0

Gracias Max. Buen hack. Expandí módulos de oído, jarra y guerra. Marcado todos los archivos y usado git diff. –

1

En Beyond Compare vaya al cuadro de diálogo Session Settings, y en la pestaña Handling hay una opción Archive Handling. Si está configurado en As folders always BC tratará los archivos como carpetas, por lo que es completamente recursivo.

+0

Eso parece hacer que funcione recursivamente, pero no hay salida. Todo lo que obtengo es una marca de tiempo y "comparé con éxito 44410 elementos. Completado en 35,9 segundos". Hay algunas diferencias entre los dos archivos .ear, pero no se informan. Si profundizo en la estructura del archivo, muestra los archivos con diferencias. Necesito obtener un informe de diferencias sin tener que explorar manualmente todo el árbol. –

+0

Suponiendo que está escribiendo un script, si solo quiere una lista de archivos, use el comando 'FOLDER-REPORT'. Si desea los detalles dentro de los archivos use 'EXPAND ALL',' SELECT DIFF.FILES NEWER.FILES OLDER.FILES ORPHAN.FILES', luego 'FILE-REPORT'. FILE/FOLDER-REPORT ambos requieren parámetros adicionales cubiertos en la ayuda. Puede escribir el informe resultante en un archivo HTML o de texto sin formato. –

+0

No estaba escribiendo un script BC. Decidí finalmente escribir un programa Java para expandir recursivamente un archivo .ear y todos los archivos contenidos en él. –

5

zipdiff ofrece una muy buena solución de código abierto.

+0

zipdiff es bueno pero no funcionará bien en Linux porque se esperan las rutas de MS Windows – onknows

Cuestiones relacionadas