maven-2 - plugin - maven repository central pom
Problemas de orden de clase de Maven (2)
¿Alguien sabe de una manera de establecer un orden de ruta de clase específico en Maven2, en lugar del orden aleatorio que parece experimentar en este momento?
Hay una serie de razones legítimas para querer hacer esto:
- Un proveedor ha suministrado un parche de parches, que contiene clases de anulación para un tarro previamente publicado y, por lo tanto, el parche de parches debe aparecer primero en el orden de classpath.
- Dos jarrones encontrados en la ruta de clase descubierta al atravesar dependencias de pom contienen la misma clase en el mismo paquete con diferentes firmas. Por ejemplo:
jboss jbossall-client 4.2.0.GA
org.hibernate hibernate 3.1
ambos contienen: org.hibernate.util.ReflectHelper.class, pero a la versión del cliente jbossall le falta el método getFastClass.
Desde Google, veo que este es quizás un punto de discusión entre los entusiastas de Maven y las personas que enfrentan este problema en particular, pero seguramente hay razones legítimas para el orden de classpath.
¡Cualquier consejo de cualquiera que haya resuelto este dilema particular sería muy apreciado!
Gracias
A partir de la versión 2.0.9, maven usa el orden pom para classpath, por lo que puede manipularlo ahora. Principalmente eliminamos las dependencias transitivas a bibliotecas externas que también incluimos directamente.
De las notas de lanzamiento de maven 2.0.9:
MNG-1412 / MNG-3111 introdujo el ordenamiento determinista de las dependencias en el classpath. En el pasado, se utilizaba el ordenamiento natural del conjunto y esto daba lugar a resultados impares. El orden ahora se conserva de su pom, con las dependencias agregadas por herencia agregadas en último lugar. En las compilaciones que tenían dependencias conflictivas o duplicadas, esto puede introducir un cambio en la salida. En resumen, si tiene problemas extraños con 2.0.9, eche un vistazo a las dependencias para ver si hay conflictos en algún lugar.
Maven 2.0.9 agrega el orden correcto, por lo que absolutamente debe tener esa versión o superior para que funcione a continuación.
En segundo lugar necesitas el plugin actualizado. Los chicos de Maven están trabajando en una solución, está en su jira para solucionarlo, pero es algo que necesitaba con urgencia. Mientras tanto, lo he solucionado yo mismo y puede extraer el código fuente del complemento Modificado de github.
Edición: consulte http://jira.codehaus.org/browse/MECLIPSE-388
Hay dos formas de instalarlo: tirar mi código modificado e instalarlo o descargar el jar precompilado y simplemente agregarlo.
Construyendo el plugin
Ejecute maven install
desde el directorio de complementos que verificó y luego agregue lo siguiente en la sección de complementos de su pom de proyectos:
<build>
</plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8-cpfix</version>
</plugin>
</plugins>
</build>
Descargar el tarro
Alternativamente, si no desea descargar y compilarse usted mismo, simplemente puede obtener el archivo jar e instalarlo usted mismo.
Una vez que haya ejecutado el archivo
mvn install:install-file -Dfile=<path-to-file> -DgroupId=org.apache.maven.plugins /
-DartifactId=maven-eclipse-plugin -Dversion=2.8-cpfix -Dpackaging=jar
Independientemente de cómo lo instaló ahora cuando ejecuta mvn eclipse:eclipse
recogerá el código modificado y ordenará las dependencias según el orden que definió en su archivo pom, sin orden alfabético. También colocará el contenedor JRE en la parte superior de las dependencias.
Esperamos que la versión real de este código salga pronto, pero mientras tanto, esta solución me ha funcionado en mi proyecto y espero que pueda ayudar a otros también.