2012-01-15 13 views
6

Estaba pensando en las dependencias en Maven. Maven los descarga, pero se desconoce para qué versión de destino de JVM se compilan y con qué compilador. Esto genera dos preguntas:Recompilación de dependencias con Maven - posible? Cualquier aumento de rendimiento?

  • ¿La recompilación de la dependencia generaría bibliotecas de dependencias más rápidas? He intentado buscar esto, pero no he encontrado suficiente respuesta. Descubrí que para 1.6 hay Split bytecode verification, eso se hace al compilar con el objetivo 1.6.
    También hay una pregunta Are Java 6's performance improvements in the JDK, JVM, or both? donde se menciona que las versiones más nuevas de javac podrían generar un código más optimizado.
  • ¿Es posible con Maven realizar la recompilación de bibliotecas dependientes? ¿Sería posible configurar Maven para descargar fuentes, poner allí información sobre el objetivo 1.6 y realizar mvn clean install?
    Soy consciente de Maven Dependency plugin y dependency:sources objetivo. Eso podría usarse para la descarga de la fuente.
    También hay Maven Replacer Plugin permitiendo el reemplazo de texto en archivos. Como se indica en su Issue 58, se implementó el soporte de XPath para ello.
    ¿Sería posible implementarlo con estos complementos para la dependencia y también para sus dependencias para realizarlo? No estoy seguro de cómo realizarlo en las dependencias, tal vez con Maven Replacer Plugin inyectando la configuración en las dependencias desempaquetadas pom.xml?
    ¿O existe una forma más sencilla de configurar la versión de destino de Java con el perfil de compilación en settings.xml que tomaría precedencia de la configuración del proyecto y, por lo tanto, evitar la modificación pom.xml?

Respuesta

3

El javac no tiene optimizaciones y las que tiene han estado allí desde los primeros días. (Y podría incluso considerarse histórico) Si tiene un código creado por Java 1.0, puede encontrar una mejora, pero cualquier cosa de las últimas décadas probablemente sea tan óptima en el código de bytes como lo es hoy.

La mayor parte de la optimización se realiza en la propia JVM, y debería encontrar que la actualización 30 de Java 6 se ejecuta más rápido que la actualización 0 de Java 6, incluso para exactamente el mismo código.

1

Pensemos por un momento qué es una dependencia de Maven. En el sentido más general, es una pieza de software desarrollado por otra persona, que vive su propio ciclo de vida que:

  • se empaqueta en un archivo,
  • que existe en un repositorio
  • bajo un descriptor versión (grupo, artefacto, versión).

Eso es todo lo que Maven garantiza. Tenga en cuenta que incluso no dice que sea Java (podrían ser recursos, o bibliotecas nativas, por ejemplo). No mucho. Demasiado poco para exigir la recompilación automática de dependencias.

+0

Ese es un buen punto. Soy consciente de que el paquete con recursos no afecta el rendimiento. Estaba considerando el caso de las bibliotecas de Java que se compilan, si hay una forma de cómo volver a compilarlas y forzar la versión de destino de Java a 1.6 (si hubiera alguna diferencia). Estoy pensando en ello como el sistema de compilación de paquetes de Linux. Es posible compilar paquetes, pero ciertamente podría haber paquetes que contengan, por ejemplo, documentación que no afecta la perofrmace. – Aries

Cuestiones relacionadas