2010-07-29 17 views
22

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?

+0

Duplicado: http://stackoverflow.com/questions/4513090/how-to-break-a-maven-build-when-there-is-a-dependency-conflict –

Respuesta

16

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 
3

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).

+0

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

1

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> 
+0

Olvidé mi firma: lo único que me gusta de maven es la gestión de la dependencia. –

Cuestiones relacionadas