Посмотреть дерево зависимостей maven

Дерево зависимостей Maven — разрешение конфликтов

Дерево зависимостей Maven очень полезно для понимания зависимостей проекта и разрешения любых конфликтов из-за разных версий зависимости.

Как получить дерево зависимостей Maven проекта

Мы можем запустить команду mvn dependency:tree в терминале, чтобы распечатать дерево зависимостей проекта. В нашем примере я буду использовать репозиторий GitHub. Нас интересуют только зависимости проекта. pom.xml объявил следующие зависимости проекта.

  org.junit.platform junit-platform-runner 1.2.0 test  org.junit.jupiter junit-jupiter-engine 5.2.0 test  org.mockito mockito-junit-jupiter 2.19.0 test   org.testng testng 6.14.3 test   

Давайте посмотрим на результат, когда мы запустим команду дерева зависимостей maven.

$ mvn dependency:tree [INFO] Scanning for projects. [INFO] [INFO] ----------------------------- [INFO] Building Mockito-Examples 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Mockito-Examples --- [INFO] com.journaldev.mockito:Mockito-Examples:jar:1.0-SNAPSHOT [INFO] +- org.junit.platform:junit-platform-runner:jar:1.2.0:test [INFO] | +- org.apiguardian:apiguardian-api:jar:1.0.0:test [INFO] | +- org.junit.platform:junit-platform-launcher:jar:1.2.0:test [INFO] | +- org.junit.platform:junit-platform-suite-api:jar:1.2.0:test [INFO] | | \- org.junit.platform:junit-platform-commons:jar:1.2.0:test [INFO] | \- junit:junit:jar:4.12:test [INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.2.0:test [INFO] | +- org.junit.platform:junit-platform-engine:jar:1.2.0:test [INFO] | | \- org.opentest4j:opentest4j:jar:1.1.0:test [INFO] | \- org.junit.jupiter:junit-jupiter-api:jar:5.2.0:test [INFO] +- org.mockito:mockito-junit-jupiter:jar:2.19.0:test [INFO] | \- org.mockito:mockito-core:jar:2.19.0:test [INFO] | +- net.bytebuddy:byte-buddy:jar:1.8.10:test [INFO] | +- net.bytebuddy:byte-buddy-agent:jar:1.8.10:test [INFO] | \- org.objenesis:objenesis:jar:2.6:test [INFO] \- org.testng:testng:jar:6.14.3:test [INFO] +- com.beust:jcommander:jar:1.72:test [INFO] \- org.apache-extras.beanshell:bsh:jar:2.0b6:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.871 s [INFO] Finished at: 2019-12-13T12:24:11+05:30 [INFO] ------------------------------------------------------------------------ $ 

Вывод показывает все JAR-файлы, используемые для запуска этого приложения. В выходных данных показаны идентификатор группы зависимостей, идентификатор артефакта, упаковка, версия и область действия.

Читайте также:  Русский стиль дерево архитектура

Исключение зависимости из зависимостей проекта Maven

Если вы посмотрите на приведенный выше вывод дерева зависимостей, JAR JUnit 4 извлекается как транзитивная зависимость junit-platform-runner . Если вы планируете использовать JUnit 5 для написания тестовых случаев, рекомендуется исключить JUnit 4 из зависимости, чтобы избежать конфликтов. Мы можем исключить JUnit 4 JAR из зависимостей проекта, используя тег исключения. Его нужно добавить в зависимость, которая отвечает за его вытягивание.

 org.junit.platform junit-platform-runner 1.2.0 test  junit junit    

Давайте снова запустим команду дерева зависимостей. Теперь он не должен показывать JAR-файлы JUnit 4.

Разрешение конфликтов с использованием подробного режима дерева зависимостей Maven

Когда мы создаем проект maven, выбирается версия зависимости, которая ближе к проекту. Это может вызвать проблемы, когда вам нужна конкретная версия, но maven выбирает другую версию. Мы можем использовать команду mvn dependency:tree -Dverbose для вывода конфликтов зависимостей. Это может помочь нам определить, есть ли какие-либо проблемы несовместимости с JAR.

$ mvn dependency:tree -Dverbose [INFO] Scanning for projects. [INFO] [INFO] ----------------------------- [INFO] Building Mockito-Examples 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Mockito-Examples --- [INFO] com.journaldev.mockito:Mockito-Examples:jar:1.0-SNAPSHOT [INFO] +- org.junit.platform:junit-platform-runner:jar:1.2.0:test [INFO] | +- org.apiguardian:apiguardian-api:jar:1.0.0:test [INFO] | +- org.junit.platform:junit-platform-launcher:jar:1.2.0:test [INFO] | | +- (org.apiguardian:apiguardian-api:jar:1.0.0:test - omitted for duplicate) [INFO] | | \- (org.junit.platform:junit-platform-engine:jar:1.2.0:test - omitted for duplicate) [INFO] | \- org.junit.platform:junit-platform-suite-api:jar:1.2.0:test [INFO] | +- (org.apiguardian:apiguardian-api:jar:1.0.0:test - omitted for duplicate) [INFO] | \- org.junit.platform:junit-platform-commons:jar:1.2.0:test [INFO] | \- (org.apiguardian:apiguardian-api:jar:1.0.0:test - omitted for duplicate) [INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.2.0:test [INFO] | +- (org.apiguardian:apiguardian-api:jar:1.0.0:test - omitted for duplicate) [INFO] | +- org.junit.platform:junit-platform-engine:jar:1.2.0:test [INFO] | | +- (org.apiguardian:apiguardian-api:jar:1.0.0:test - omitted for duplicate) [INFO] | | +- (org.junit.platform:junit-platform-commons:jar:1.2.0:test - omitted for duplicate) [INFO] | | \- org.opentest4j:opentest4j:jar:1.1.0:test [INFO] | \- org.junit.jupiter:junit-jupiter-api:jar:5.2.0:test [INFO] | +- (org.apiguardian:apiguardian-api:jar:1.0.0:test - omitted for duplicate) [INFO] | +- (org.opentest4j:opentest4j:jar:1.1.0:test - omitted for duplicate) [INFO] | \- (org.junit.platform:junit-platform-commons:jar:1.2.0:test - omitted for duplicate) [INFO] +- org.mockito:mockito-junit-jupiter:jar:2.19.0:test [INFO] | +- org.mockito:mockito-core:jar:2.19.0:test [INFO] | | +- net.bytebuddy:byte-buddy:jar:1.8.10:test [INFO] | | +- net.bytebuddy:byte-buddy-agent:jar:1.8.10:test [INFO] | | \- org.objenesis:objenesis:jar:2.6:test [INFO] | \- (org.junit.jupiter:junit-jupiter-api:jar:5.1.0:test - omitted for conflict with 5.2.0) [INFO] \- org.testng:testng:jar:6.14.3:test [INFO] +- com.beust:jcommander:jar:1.72:test [INFO] \- org.apache-extras.beanshell:bsh:jar:2.0b6:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.018 s [INFO] Finished at: 2019-12-13T12:58:07+05:30 [INFO] ------------------------------------------------------------------------ $ 

Строка вывода (org.junit.jupiter:junit-jupiter-api:jar:5.1.0:test — опущена из-за конфликта с 5.2.0) говорит нам, что эта версия JAR отброшена в пользу другой версии. Если вы хотите использовать junit-jupiter-api версии 5.1.0, просто добавьте его в зависимости проекта maven. Поскольку Maven разрешает конфликты версий с помощью стратегии ближайшего выигрыша, прямые зависимости всегда включаются в проект.

Читайте также:  Все названия деревьев вонючка

Фильтрация дерева зависимостей Maven

Если в проекте maven много зависимостей, становится сложно искать конкретный артефакт.

-Включает

Мы можем использовать параметр -Dincludes , чтобы включить в вывод только определенные зависимости. Синтаксис шаблона фильтрации: [groupId]:[artifactId]:[type]:[version] . Каждый сегмент шаблона является необязательным и поддерживает полные и частичные подстановочные знаки *.

$ mvn dependency:tree -Dverbose -Dincludes=org.junit.jupiter:junit-jupiter-api [INFO] Scanning for projects. [INFO] [INFO] ----------------------------- [INFO] Building Mockito-Examples 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Mockito-Examples --- [INFO] com.journaldev.mockito:Mockito-Examples:jar:1.0-SNAPSHOT [INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.2.0:test [INFO] | \- org.junit.jupiter:junit-jupiter-api:jar:5.2.0:test [INFO] \- org.mockito:mockito-junit-jupiter:jar:2.19.0:test [INFO] \- (org.junit.jupiter:junit-jupiter-api:jar:5.1.0:test - omitted for conflict with 5.2.0) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.981 s [INFO] Finished at: 2019-12-13T13:04:04+05:30 [INFO] ------------------------------------------------------------------------ $ 

-Исключает

Это используется для удаления заданных зависимостей из вывода дерева зависимостей. Шаблон аналогичен параметру -Dincludes . Мы можем использовать запятую, чтобы указать несколько шаблонов для включения или исключения из дерева зависимостей.

$ mvn dependency:tree -Dexcludes=org.junit.jupiter:junit-jupiter-api [INFO] Scanning for projects. [INFO] [INFO] ----------------------------- [INFO] Building Mockito-Examples 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Mockito-Examples --- [INFO] com.journaldev.mockito:Mockito-Examples:jar:1.0-SNAPSHOT [INFO] +- org.junit.platform:junit-platform-runner:jar:1.2.0:test [INFO] | +- org.apiguardian:apiguardian-api:jar:1.0.0:test [INFO] | +- org.junit.platform:junit-platform-launcher:jar:1.2.0:test [INFO] | \- org.junit.platform:junit-platform-suite-api:jar:1.2.0:test [INFO] | \- org.junit.platform:junit-platform-commons:jar:1.2.0:test [INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.2.0:test [INFO] | \- org.junit.platform:junit-platform-engine:jar:1.2.0:test [INFO] | \- org.opentest4j:opentest4j:jar:1.1.0:test [INFO] +- org.mockito:mockito-junit-jupiter:jar:2.19.0:test [INFO] | \- org.mockito:mockito-core:jar:2.19.0:test [INFO] | +- net.bytebuddy:byte-buddy:jar:1.8.10:test [INFO] | +- net.bytebuddy:byte-buddy-agent:jar:1.8.10:test [INFO] | \- org.objenesis:objenesis:jar:2.6:test [INFO] \- org.testng:testng:jar:6.14.3:test [INFO] +- com.beust:jcommander:jar:1.72:test [INFO] \- org.apache-extras.beanshell:bsh:jar:2.0b6:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.925 s [INFO] Finished at: 2019-12-13T13:55:22+05:30 [INFO] ------------------------------------------------------------------------ $ 

Дерево зависимостей Maven в Eclipse IDE

Eclipse pom.xml Вкладка «Иерархия зависимостей» показывает дерево зависимостей проекта. Оно имеет две стороны — левая сторона показывает подробный вывод, а правая сторона показывает разрешенные зависимости. Мы можем использовать параметр «Фильтр» для поиска конкретная зависимость.

Читайте также:  Под карандаши из дерева

Дополнительная литература: Использование Maven в Eclipse IDE

Сохранение дерева зависимостей в файл

Мы можем использовать параметр -DoutputFile, чтобы указать файл для сохранения вывода дерева зависимостей.

$ mvn dependency:tree -DoutputFile=dependency-tree.txt [INFO] Scanning for projects. [INFO] [INFO] ----------------------------- [INFO] Building Mockito-Examples 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Mockito-Examples --- [INFO] Wrote dependency tree to: /Users/pankaj/Desktop/maven-examples/Mockito-Examples/dependency-tree.txt [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.862 s [INFO] Finished at: 2019-12-13T15:27:51+05:30 [INFO] ------------------------------------------------------------------------ $ $ cat dependency-tree.txt com.journaldev.mockito:Mockito-Examples:jar:1.0-SNAPSHOT +- org.junit.platform:junit-platform-runner:jar:1.2.0:test | +- org.apiguardian:apiguardian-api:jar:1.0.0:test | +- org.junit.platform:junit-platform-launcher:jar:1.2.0:test | \- org.junit.platform:junit-platform-suite-api:jar:1.2.0:test | \- org.junit.platform:junit-platform-commons:jar:1.2.0:test +- org.junit.jupiter:junit-jupiter-engine:jar:5.2.0:test | +- org.junit.platform:junit-platform-engine:jar:1.2.0:test | | \- org.opentest4j:opentest4j:jar:1.1.0:test | \- org.junit.jupiter:junit-jupiter-api:jar:5.2.0:test +- org.mockito:mockito-junit-jupiter:jar:2.19.0:test | \- org.mockito:mockito-core:jar:2.19.0:test | +- net.bytebuddy:byte-buddy:jar:1.8.10:test | +- net.bytebuddy:byte-buddy-agent:jar:1.8.10:test | \- org.objenesis:objenesis:jar:2.6:test \- org.testng:testng:jar:6.14.3:test +- com.beust:jcommander:jar:1.72:test \- org.apache-extras.beanshell:bsh:jar:2.0b6:test $ 

Рекомендации

  • Подключаемый модуль зависимостей Maven
  • Разрешение конфликтов с помощью дерева зависимостей
  • Фильтрация дерева зависимостей

Источник

Оцените статью