Как проверить наличие конфликтов библиотек в Maven


Дата публикации:20 января 2021 года.



INFOMARTION > Как проверить наличие конфликтов библиотек в Maven

Обзор.

Как проверить наличие конфликтов библиотек в Maven. Maven автоматически разрешает зависимости библиотеки jar, но конфигурация по умолчанию не информирует вас о конфликтах. Вот как проверить наличие конфликтов библиотек в Maven в таких случаях.

Оглавление

  1. Когда в Maven возникают конфликты библиотек
  2. Как проверить
  3. резюме

1. Когда в Maven возникают конфликты библиотек

Maven автоматически разрешает зависимости библиотек Java. Автоматическое разрешение зависимостей означает, что если у вас есть файл Jar, который вам нужен, он автоматически получит Jar, необходимый для запуска этого Jar. Для получения дополнительной информации о том, как работает разрешение зависимостей конкретных библиотек, смотрите следующую статью.

Как Maven автоматически разрешает зависимости библиотек jar.

Однако, когда возникают конфликты библиотек, они не разрешаются автоматически. Более того, если у вас нет соответствующих настроек, вы даже не сможете обнаружить конфликт. Мы хотели бы рассказать, как проверить наличие библиотечных конфликтов.

2. Как проверить

Существует два основных способа проверить наличие конфликтов в библиотеке

  • Внедрение плагинов
  • Предварительное подтверждение сборки по команде.

'Install plug-ins' - это метод добавления настроек в pom.xml. 'Check with command before build' буквально означает ручную проверку командой перед сборкой. Я хотел бы объяснить, как это сделать конкретно.

2-1. Внедрение плагинов

Следующие веб-сайты Maven могут быть полезны.

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

Добавьте следующие настройки в 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>

Если вставлены вышеуказанные настройки, возникает следующая ошибка, и сборка завершается неудачно, если на момент сборки имеются конфликты библиотек.

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

Если сборка применяется без подключаемых модулей, ошибок не возникает, и сборка завершается нормально. Если вы хотите обнаружить конфликты, обязательно настройте это.

2-2. Предварительное подтверждение сборки по команде.

Проверка зависимостей осуществляется с помощью следующих команд

mvn dependency:tree -Dverbose

и "опущено для конфликта" отображается, если конфликт существует. Также можно сузить вывод только до тех областей, где есть конфликты, как в следующей команде. ※'find' - это команда для Windows. В Linux это 'grep'.

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

Конфликты библиотек можно проверить, посмотрев на результаты выполнения вышеуказанных команд.

3. резюме

Если вы хотите надежно обнаруживать конфликты библиотек, мы рекомендуем 'Установить плагины'. Внедрение подключаемых модулей гарантирует, что любые конфликты будут замечены, поскольку сборка завершится неудачей.

Спасибо, что досмотрели до конца.