2010-12-22 11 views
17

me encontré con la dependencia mvn: Árbol para un proyecto y vi una salida como la siguiente:¿Cómo romper una compilación maven cuando hay un conflicto de dependencia?

[INFO] my:project:jar:1.0.0-SNAPSHOT 
[INFO] +- some.other:library:jar:2.0.0:compile 
[INFO] | \- org.slf4j:slf4j-api:jar:1.6.1:compile 
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.0:compile 
[INFO] | \- (org.slf4j:slf4j-api:jar:1.6.0:compile - omitted for conflict with 1.6.1) 

Se trata de un mal estado de estar en mi proyecto, porque depende directamente de slf4j 1.6.0 y alguna biblioteca que dependemos en transitivo depende de slf4j 1.6.1. Estas dos versiones resultan ser compatibles con binarios, por lo que la compilación pasa sin advertencias. ¿Hay alguna manera de hacer que Maven sea más estricto con su resolución de dependencia para que yo pueda configurar una nueva compilación que fallaría en este escenario? En este caso, la solución sería actualizar nuestra dependencia a la versión más nueva de slf4j.

Respuesta

22

El plugin maven-enforcer tiene una configuración dependencyConvergence que hace lo que quiero. Casualmente, el ejemplo de la documentación usa slf4j.

Configurar así:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
      <id>enforce</id> 
      <configuration> 
       <rules> 
        <DependencyConvergence /> 
       </rules> 
      </configuration> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Esta combinación de dependencias 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 
Cuestiones relacionadas