¿Alguien puede explicar cómo fuentes idénticas de Java pueden terminar compilando a binario archivos de clase diferentes?Fuentes idénticas de Java compilan en clases binarias diferentes
La pregunta surge de la siguiente situación:
Tenemos una aplicación bastante grande (más de 800 clases) que se ha ramificado, reestructurada luego reintegrado en el tronco. Antes de la reintegración, fusionamos el tronco en la rama, que es el procedimiento estándar.
El resultado final fue un conjunto de directorios con las fuentes de la sucursal y un conjunto de directorios con las fuentes troncales. Utilizando Beyond Compare pudimos determinar que ambos conjuntos de fuentes eran idénticos. Sin embargo, al compilar (mismo JDK usando maven hospedado en IntelliJ v11) notamos que aproximadamente una docena de los archivos de clase eran diferentes.
Cuando descompilamos la fuente de cada par de archivos de clase aparentemente diferentes, terminamos con la misma fuente de Java, por lo que en términos del resultado final, no parece importar. ¿Pero por qué es que solo algunos de los archivos son diferentes?
Gracias.
pensamiento adicional:
Si experto/javac compila archivos en una secuencia diferente, puede que afectará el resultado final?
diferentes versiones jdk? Me imagino que las optimizaciones pueden ser diferentes para las diferentes versiones. – RNJ
Usando javap -c -v (gracias Peter Lawrey) y viendo las salidas respectivas usando Beyond Compare (gran herramienta, ¡me encanta!) Puedo confirmar que el ítem 5 de la respuesta de Stephen C (gracias a Stephen C) da parte de la respuesta aquí. En varios de los casos, el orden de grupo constante es diferente. Sin embargo, estoy bastante seguro de que classpath es el mismo para ambos, pero el orden de compilación puede ser diferente. – Vicki