Как Maven разрешает транзитивные зависимости из репозиториев
Дата публикации:
Обновлено:
Статьи > Как Maven разрешает транзитивные зависимости из репозиториев
Статус 2026 года и безопасное использование
Вывод: Maven не обнаруживает произвольные JAR-файлы по имени файла. Он разрешает объявленные координаты, загружает артефакт POM, отслеживает зависимости POM, применяет область действия и дополнительные правила, а также использует посредничество зависимостей, когда несколько путей запрашивают разные версии.
Чему вы научитесь
- Как локальные, центральные, зеркальные и частные репозитории участвуют в разрешении.
- Почему POM зависимости, а не сам JAR, описывает большинство транзитивных требований.
- Как проверить эффективный график перед переопределением версии.
Для кого: пользователи Maven, которые хотят понять, откуда берутся загруженные артефакты и почему появляются дополнительные библиотеки.
Актуальность на 2026 год г. Приведенные ниже старые координаты POI Apache остаются полезными в качестве исторического примера, а не рекомендации по версии. Используйте текущие поддерживаемые зависимости, надежные репозитории HTTPS, элементы управления контрольной суммой и подписями, если они доступны, а также политику обновления зависимостей.
Примечание по безопасности. Команды и примеры конфигурации из исходной статьи не проверялись повторно в современной производственной среде. Перед применением проверьте поддерживаемые версии, резервные копии, контроль доступа и процедуру отката в отдельной тестовой среде.
Официальные первоисточники
Обзор
Maven автоматически загружает JAR-файлы и их зависимости из репозиториев. В этом разделе описан механизм разрешения зависимостей.
Если понятия POM, артефакта и жизненного цикла пока незнакомы, начните со следующего вводного материала.
Что такое Maven и что делает Maven?
Оглавление
1. Разрешение JAR-зависимостей с помощью Maven
Достаточно объявить зависимость в pom.xml: Maven загрузит требуемый артефакт и его транзитивные зависимости.
1-1. Что включить в файл pom.xml.
Зависимости объявляются в pom.xml с помощью координат Maven. В примере указан Apache POI 3.17 — библиотека, которая, среди прочего, используется для обработки документов Microsoft Office.
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
По этой декларации Maven загружает "poi-3.17.jar" и транзитивные зависимости, необходимые для его работы.
1-2. Как они загружаются из Интернета?
Простое объяснение системы показано на схеме ниже.
Maven разрешает артефакты в настроенных репозиториях. Без дополнительных настроек используется Maven Central по следующему адресу.
https://repo1.maven.org/maven2/
Список хранилищ, доступных в Интернете, если вас это интересует, см. на следующем сайте.
https://mvnrepository.com/repos
В первый раз jar берется из внешнего хранилища, но он копируется в локальное хранилище и не берется со второго раза. Местоположение локального репозитория - "C:\Users\user\.m2".
Если вы хотите изменить пункт назначения по сравнению со значением по умолчанию, вы также можете изменить его, включив следующий тег репозитория в pom.xml.
<repositories>
<repository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
</snapshots>
</repository>
</repositories>
1-3. Разрешение зависимостей JAR-артефакта
Мы только что описали пример получения 'poi-3.17.jar', но для запуска 'poi-3.17.jar' требуется 'commons-collections4-4.1.jar'. Это означает, что 'poi-3.17.jar' зависит от 'commons-collections4-4.1.jar'. Механизм разрешения этой зависимости можно найти в репозитории Maven, где хранится 'poi-3.17.jar'. URL-адрес выглядит следующим образом.
https://repo1.maven.org/maven2/org/apache/poi/poi/3.17/
В репозитории также опубликован "poi-3.17.pom". Maven читает этот POM, обнаруживает зависимость от "commons-collections4-4.1.jar" и повторяет разрешение для остальных артефактов. Перед принудительным выбором версии следует проверить получившийся граф.
2. Итоги
POM проекта объявляет прямые артефакты, а опубликованные в репозиториях POM-файлы описывают транзитивные зависимости. Maven разрешает граф, загружает нужные файлы и сохраняет их в локальном репозитории.
