Saltar al contenido

Detectar conflictos de dependencia con Maven

Solución:

Puede configurar un dependenciaConvergencia regla ejecutora en Maven. Esta regla requiere que los números de versión de dependencia converjan.

Si un proyecto tiene dos dependencias, A y B, ambas dependiendo del mismo artefacto, C, esta regla fallará en la compilación si A depende de una versión de C diferente a la versión de C de la que depende B.

La regla se puede agregar así.

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0-M2</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

Más detalles se pueden encontrar aquí.

Para detectar todas las dependencias transitivas puede utilizar el maven-dependency-plugin:

mvn dependency:tree -Dverbose

Mostrará las dependencias directas y transitivas de su proyecto. los -Dverbose La opción muestra los conflictos.

[INFO] [dependency:tree]
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT
[INFO] +- org.apache.maven.reporting:maven-reporting-impl:jar:2.0.4:compile
[INFO] |  - commons-validator:commons-validator:jar:1.2.0:compile
[INFO] |     - commons-digester:commons-digester:jar:1.6:compile
[INFO] |        - (commons-collections:commons-collections:jar:2.1:compile - omitted for conflict with 2.0)
[INFO] - org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile
[INFO]    - org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile
[INFO]       - commons-collections:commons-collections:jar:2.0:compile

Para la selección de la misma biblioteca con diferentes versiones:

Mediación de dependencia: determina qué versión de un artefacto se elegirá cuando se encuentren varias versiones como dependencias. Maven elige la “definición más cercana”. Es decir, usa la versión de la dependencia más cercana a su proyecto en el árbol de dependencias. Siempre puede garantizar una versión declarándola explícitamente en el POM de su proyecto. Tenga en cuenta que si dos versiones de dependencia están a la misma profundidad en el árbol de dependencia, la primera declaración gana.

“definición más cercana” significa que la versión utilizada será la más cercana a su proyecto en el árbol de dependencias. Por ejemplo, si las dependencias para A, B y C se definen como A -> B -> C -> D 2.0 y A -> E -> D 1.0, entonces D 1.0 se usará al construir A porque la ruta de A a D a E es más corto. Podría agregar explícitamente una dependencia a D 2.0 en A para forzar el uso de D 2.0.

Entonces, si una de sus bibliotecas no funciona con las otras versiones de guava, eso significa que sus dependencias no son compatibles. Eso debería actualizarse para que funcione con la versión más reciente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *