Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Просмотр дерева зависимостей в Maven
Это одна из самых полезных команд, которую я использую почти ежедневно в работе. Помогает отладить конфликты зависимостей, понять версионирование и оптимизировать размер сборки.
Базовая команда
Самый простой способ:
mvn dependency:tree
Вывод выглядит так:
[INFO] com.example:my-app:jar:1.0.0
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.0:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.7.0:compile
[INFO] | | +- org.springframework.boot:spring-boot:jar:2.7.0:compile
[INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.7.0:compile
[INFO] | | +- org.springframework:spring-core:jar:5.3.9:compile
[INFO] | | | +- org.springframework:spring-jcl:jar:5.3.9:compile
[INFO] | \- org.springframework.boot:spring-boot-starter-tomcat:jar:2.7.0:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.46:compile
[INFO] +- junit:junit:jar:4.13.2:test
Полезные флаги
1. Вывод в файл
mvn dependency:tree > dependencies.txt
2. Отфильтровать по конкретной зависимости
mvn dependency:tree -Dincludes=org.springframework:spring-core
Покажет только цепочку к spring-core:
[INFO] com.example:my-app:jar:1.0.0
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.0:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.7.0:compile
[INFO] | | +- org.springframework:spring-core:jar:5.3.9:compile
3. Показать конфликты версий
mvn dependency:tree -Dverbose
Отобразит дублирующиеся зависимости:
[INFO] | +- org.springframework:spring-web:jar:5.3.9:compile (version managed from 5.2.0)
[INFO] | +- org.springframework:spring-aop:jar:5.3.9:compile (duplicate)
4. Исключить определённые зависимости
mvn dependency:tree -Dexcludes=org.springframework.boot:spring-boot-starter-logging
5. Список только определённого скопа
mvn dependency:tree -DoutputFile=dependencies.txt -Dscope=test
Практические примеры из моего опыта
Пример 1: Найти все версии Spring
mvn dependency:tree | grep spring
Это помогает, когда есть конфликты версий Spring между разными либами.
Пример 2: Найти дерево для конкретного логирования
mvn dependency:tree -Dincludes=org.slf4j:slf4j-api,ch.qos.logback:logback-classic
Пример 3: Проверить размер зависимостей
mvn dependency:tree -DoutputFile=/tmp/deps.txt
cat /tmp/deps.txt
Решение конфликтов зависимостей
Основная проблема: две либы требуют разные версии одной зависимости.
После просмотра дерева:
mvn dependency:tree -Dverbose
Видим конфликт:
[INFO] +- org.springframework.boot:spring-boot-starter-security:jar:2.7.0:compile
[INFO] | +- org.springframework.security:spring-security-core:jar:5.7.0:compile
[INFO] | +- org.springframework:spring-core:jar:5.3.9:compile
[INFO] +- org.springframework:spring-core:jar:5.2.0:compile
Решение — явно указать версию в pom.xml (dependency management):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
</dependencyManagement>
Интеграция с IDE
IntelliJ IDEA
Прямо в IDE:
- Правый клик на
pom.xml - Выбрать "Show Dependency Diagram"
- Видеть интерактивное дерево
Шорткат: Ctrl+Alt+U в pom.xml
VS Code
Расширение Maven для VS Code имеет встроенный просмотр зависимостей.
Анализ с помощью другие команд
Найти дублирующиеся зависимости
mvn dependency:analyze
Выводит:
- "Unused declared dependencies" — не нужные
- "Used undeclared dependencies" — забытые в pom.xml
Практический workflow
-
Когда возникает конфликт версий:
mvn dependency:tree -Dverbose -Dincludes=problematic-lib -
Проверить, есть ли дублирование:
mvn dependency:analyze -
Очистить дерево:
mvn clean dependency:purge-local-repository dependency:resolve -
Пересчитать зависимости:
mvn clean install
Эта комбинация команд спасает при проблемах с Maven resolution. За 10+ лет использования Maven, она помогла мне разрешить 99% всех зависимостей конфликтов в сложных многомодульных проектах.