Устранение конфликтов зависимостей Maven с помощью dependency:tree
Дата публикации:
Обновлено:
Статьи > Устранение конфликтов зависимостей Maven с помощью dependency:tree
Статус 2026 года и безопасное использование
Вывод: Запустите mvn dependency:tree, чтобы проверить решенный граф, а затем определите, какой путь привел к непредвиденной версии. Намеренно исправьте объявление, указав обновленную прямую зависимость, dependencyManagement или узко обоснованное исключение.
Чему вы научитесь
- Как медиация «ближайшего определения» может скрыть запрошенную транзитивную версию.
- Как подробный и отфильтрованный вывод дерева зависимостей сужает конфликт.
- Почему удаление файлов локального репозитория или добавление случайных исключений не является надежным решением.
Для кого: Разработчики Java, исследующие ошибки компоновки, неожиданные классы или уязвимые транзитивные версии.
Актуальность на 2026 год года: Параметры плагина различаются в зависимости от версии, поэтому проверьте текущую документацию по плагину зависимостей. Сочетание проверки графа с одобренным организацией процессом анализа состава программного обеспечения; чистое дерево само по себе не доказывает безопасность зависимости.
Примечание по безопасности. Команды и примеры конфигурации из исходной статьи не проверялись повторно в современной производственной среде. Перед применением проверьте поддерживаемые версии, резервные копии, контроль доступа и процедуру отката в отдельной тестовой среде.
Официальные первоисточники
Обзор
Как проверить наличие конфликтов библиотек в Maven. Maven автоматически разрешает зависимости библиотеки jar, но конфигурация по умолчанию не информирует вас о конфликтах. Вот как проверить наличие конфликтов библиотек в Maven в таких случаях.
Оглавление
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.
<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. резюме
Если вы хотите надежно обнаруживать конфликты библиотек, мы рекомендуем 'Установить плагины'. Внедрение подключаемых модулей гарантирует, что любые конфликты будут замечены, поскольку сборка завершится неудачей.