Me gustaría que mi compilación Maven falle si se hace referencia al mismo artefacto con diferentes versiones en mi árbol de dependencias. Esto parecería una opción bastante trivial, pero no puedo encontrar la forma de hacerlo. ¿Alguna pista?¿Cómo hago que Maven falle cuando se hace referencia a versiones conflictivas del mismo artefacto?
¿Cómo hago que Maven falle cuando se hace referencia a versiones conflictivas del mismo artefacto?
Respuesta
El complemento maven-enforcer-tiene una regla dependencyConvergence que hace lo que quiere. Aquí hay un ejemplo de la documentación.
Esto provocará una acumulación falle:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
Con esto se registra durante la compilación:
[ERROR]
Dependency convergence error for org.slf4j:slf4j-api:1.6.1 paths to dependency are:
+-org.myorg:my-project:1.0.0-SNAPSHOT
+-org.slf4j:slf4j-jdk14:1.6.1
+-org.slf4j:slf4j-api:1.6.1
and
+-org.myorg:my-project:1.0.0-SNAPSHOT
+-org.slf4j:slf4j-nop:1.6.0
+-org.slf4j:slf4j-api:1.6.0
La compilación puede fallar en las advertencias de análisis de dependencia mediante el complemento de dependencia.
Ver
AFAIK, 'dependencies: analyze-only' no detecta duplicados . –
El Maven Dependency Plugin incluirá un nuevo dependency:analyze-duplicate
en su versión 2.2, y esta es mi humilde opinión lo más cercano que puede obtener sin desarrollo específico (no dejará la acumulación, pero mostrará una lista de duplicado dependencias).
Este objetivo se ha añadido para MDEP-206 (Añadir nuevo Mojo para encontrar la dependencia duplicado declaró), que se fija, pero la versión 2.2 aún tiene que ser puesto en libertad por lo que si desea utilizar esta función, tendrá para construir una instantánea del árbol de fuentes:
https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-dependency-plugin/
Si realmente quiere dejar la estructura en caso de duplicado, ya sea escribir su propia mojo (extender la de arriba) o presentar un RFE de la Maven Dependencia Enchufar.
Como nota al margen, Maven 3 hace Lanza [a] Error de validación si pom contiene una dependencia con dos versiones diferentes fuera de la caja. Para ser totalmente preciso, esto se informará como advertencia en Maven 3.0 para no romper las versiones existentes de Maven 2.x (consulte MNG-4005) y se incrementará a error en 3.1 (consulte MNG-4622).
Gracias por la respuesta completa. Espero tener tiempo para integrarlo en los próximos días. Estoy un poco sorprendido de que esta característica no esté incorporada; ¿es una falta de demanda o alguna razón técnica? – Armand
Añadir el siguiente plugin:
Fuente: http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<configuration>
<rules>
<dependencyConvergence/>
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>
Olvidé mi firma: lo único que me gusta de maven es la gestión de la dependencia. –
- 1. maven hace la guerra con dos versiones del mismo contenedor
- 2. Ensamblaje de Maven: agregue una versión diferente del mismo artefacto
- 3. utilizan versiones diferentes del DLL hace referencia
- 4. error de compilación cuando se hace referencia a una biblioteca que usa maven
- 5. TSQL hace que el desencadenador falle silenciosamente
- 6. guión fsx que hace referencia a un dll que hace referencia a muchos dll
- 7. Versiones conflictivas de páginas web ASP.NET detectadas
- 8. Maven: agregar dependencia a la fuente del artefacto
- 9. ¿Por qué (a veces) tengo que hacer referencia a los ensamblados a los que hace referencia el ensamblaje al que hago referencia?
- 10. Hace referencia a MSBuildTasks del paquete Nuget
- 11. Maven: Cómo encontrar artefactos que dependen de otro artefacto
- 12. ¿Cómo se difieren dos versiones del mismo objeto?
- 13. ¿Cómo decirle a maven-dependency-plugin que el artefacto se usa en el proyecto?
- 14. Adición de frascos que se hace referencia a Android build.xml
- 15. ¿Cómo se usan varias versiones del mismo paquete R?
- 16. ¿Cómo se hace referencia a un stub que tiene un parámetro genérico de sí mismo que utiliza Microsoft Fakes?
- 17. ¿Cómo hago referencia a un archivo javascript?
- 18. ¿Cómo hago referencia a las matrices multidimensionales?
- 19. Maven: descargar artefacto y sus deps a un directorio específico
- 20. JPA 2.0 API maven artefacto
- 21. ¿Qué es un artefacto Maven?
- 22. ¿Cómo hago referencia a un objeto dinámicamente?
- 23. ¿Cómo hago que wget se silencie correctamente?
- 24. Null springSecurityService hace que encodePassword falle en Grails 2.0.1
- 25. & nbsp hace que falle la validación de HTML5
- 26. versión de artefacto de Maven para parches
- 27. Hace referencia a 2 versiones diferentes de log4net en la misma solución
- 28. Versiones conflictivas de potenciador de datanucleus en un proyecto de motor de aplicación de google de maven
- 29. Cargando múltiples versiones del mismo ensamblaje
- 30. Maven no encuentra el artefacto local
Duplicado: http://stackoverflow.com/questions/4513090/how-to-break-a-maven-build-when-there-is-a-dependency-conflict –