Como verificar conflitos na biblioteca em Maven


Data de Publicação:20 de Janeiro de 2021.



INFOMARTION > Como verificar conflitos na biblioteca em Maven

Visão geral.

Como verificar se existem conflitos na biblioteca em Maven. Maven resolve automaticamente as dependências para a biblioteca do frasco, mas a configuração padrão não o informa de conflitos. É assim que se verifica a existência de conflitos na biblioteca em Maven em tais casos.

Tabela de Conteúdos

  1. Quando ocorrem conflitos na biblioteca em Maven
  2. Como verificar
  3. resumo

1. Quando ocorrem conflitos na biblioteca em Maven

Maven resolve automaticamente as dependências da biblioteca Java. A resolução automática de dependência significa que se tiver um ficheiro Jar de que necessita, obterá automaticamente o Jar necessário para executar esse Jar. Para mais informações sobre como funciona a resolução de dependência específica da biblioteca, ver o artigo seguinte.

Como Maven resolve automaticamente as dependências da biblioteca de frascos.

Contudo, quando ocorrem conflitos na biblioteca, eles não são resolvidos automaticamente. Além disso, se não tiver os parâmetros instalados, nem sequer consegue detectar um conflito. Gostaríamos de descrever como verificar se existem conflitos na biblioteca.

2. Como verificar

Há duas formas principais de verificar se existem conflitos na biblioteca

  • Introduzindo plug-ins
  • Confirmação pré-construída por comando.

Instalar "plug-ins" é um método de adicionar definições ao pom.xml. Verificar com comando antes de construir" significa literalmente verificar manualmente com um comando antes de construir. Gostaria de explicar como fazer isto especificamente.

2-1. Introduzindo plug-ins

Os seguintes websites Maven podem ser úteis.

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

Adicionar as seguintes definições ao 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>

Se as definições acima forem inseridas, ocorre o seguinte erro e a construção falha se houver conflitos na biblioteca no momento da construção.

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

Se uma construção for aplicada sem plug-ins, não ocorrem erros e a construção termina normalmente. Se quiser detectar conflitos, assegure-se de que o estabelece.

2-2. Confirmação pré-construída por comando.

As dependências são verificadas através dos seguintes comandos

mvn dependency:tree -Dverbose

e "omitido por conflito" é exibido se houver um conflito. Também é possível limitar a produção apenas às áreas onde existem conflitos, como no comando seguinte. ※O 'find' é o comando para Windows. Para o Linux, isto é 'grep'.

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

Os conflitos na biblioteca podem ser verificados através da análise dos resultados dos comandos acima referidos.

3. resumo

Se quiser detectar de forma fiável conflitos na biblioteca, recomendamos 'Instalar plug-ins'. A introdução de plug-ins assegura que quaisquer conflitos sejam notados, uma vez que a construção falhará.

Obrigado por ter observado até ao fim.