Cómo comprobar los conflictos de las bibliotecas en Maven


Fecha de publicación:20 de enero de 2021.



INFOMARTION > Cómo comprobar los conflictos de las bibliotecas en Maven

Resumen.

Cómo comprobar los conflictos de las bibliotecas en Maven. Maven resuelve automáticamente las dependencias de la biblioteca jar, pero la configuración por defecto no informa de los conflictos. Así es como se comprueban los conflictos de librerías en Maven en estos casos.

Índice de contenidos

  1. Cuando se producen conflictos de bibliotecas en Maven
  2. Cómo comprobarlo
  3. resumen

1. Cuando se producen conflictos de bibliotecas en Maven

Maven resuelve automáticamente las dependencias de las bibliotecas de Java. La resolución automática de dependencias significa que si tiene un archivo Jar que necesita, obtendrá automáticamente el Jar necesario para ejecutar ese Jar. Para obtener más información sobre cómo funciona la resolución de dependencias específicas de las bibliotecas, consulte el siguiente artículo.

Cómo Maven resuelve automáticamente las dependencias de las bibliotecas jar.

Sin embargo, cuando se producen conflictos en las bibliotecas, no se resuelven automáticamente. Es más, si no tiene la configuración establecida, ni siquiera puede detectar un conflicto. Nos gustaría describir cómo comprobar los conflictos de la biblioteca.

2. Cómo comprobarlo

Hay dos formas principales de comprobar si hay conflictos en la biblioteca

  • Presentación de los plug-ins
  • Confirmación de pre-construcción por comando.

'Instalar complementos' es un método para añadir configuraciones al pom.xml. 'Comprobar con el comando antes de construir' significa literalmente comprobar manualmente con un comando antes de construir. Me gustaría explicar cómo hacer esto específicamente.

2-1. Presentación de los plug-ins

Los siguientes sitios web de Maven pueden ser útiles.

http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

Añade la siguiente configuración a pom.xml.

pom.xml


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

Si se insertan las configuraciones anteriores, se produce el siguiente error y la compilación falla si hay conflictos de biblioteca en el momento de la compilación.

[WARNING] 
Dependency convergence error for org.apache.commons:commons-collections4:4.1 paths to dependency are:
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.poi:poi:3.17
    +-org.apache.commons:commons-collections4:4.1
and
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.commons:commons-collections4:4.0

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability. See above detailed error message.

Si se aplica una compilación sin plug-ins, no se producen errores y la compilación termina normalmente. Si quieres detectar conflictos, asegúrate de configurar esto.

2-2. Confirmación de pre-construcción por comando.

Las dependencias se comprueban mediante los siguientes comandos

mvn dependency:tree -Dverbose

y se muestra "omitido por conflicto" si hay un conflicto. También es posible limitar la salida a sólo las áreas en las que hay conflictos, como en el siguiente comando. ※'find' es el comando para Windows. En Linux, esto es 'grep'.

mvn dependency:tree -Dverbose | find "omitted for conflict"

Los conflictos entre bibliotecas pueden comprobarse mirando los resultados de los comandos anteriores.

3. resumen

Si quiere detectar de forma fiable los conflictos de las bibliotecas, le recomendamos "Instalar plug-ins". La introducción de plug-ins garantiza que se advierta cualquier conflicto, ya que la compilación fallará.

Gracias por mirar hasta el final.