without the provided pom plugin example ejemplo dependencymanagement dependency create compiling maven-2 maven dependency-management maven-3

maven-2 - the - scope maven ejemplo



¿Cómo romper una construcción de expertos cuando hay un conflicto de dependencia? (2)

Aunque fechado, creo que esta discusión de SO está relacionada.

Ejecuté mvn dependency: tree para un proyecto y vi resultados como los siguientes:

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

Este es un mal estado porque mi proyecto depende directamente de slf4j 1.6.0 y algunas bibliotecas de las que dependemos transitivamente dependen de slf4j 1.6.1. Estas dos versiones son compatibles con binarios, por lo que la compilación pasa sin advertencias. ¿Hay alguna manera de hacer que Maven sea más estricto con respecto a su resolución de dependencia para poder configurar una nueva compilación que fallaría en este escenario? En este caso, la solución sería simplemente actualizar nuestra dependencia a la versión más reciente de slf4j.


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

Configúralo 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 hará que una compilació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 siendo registrado 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