Как Maven разрешава транзитивни зависимости от хранилища


Публикувано:

Актуализирано:


Статии › Как Maven разрешава транзитивни зависимости от хранилища

Състояние през 2026 г. и безопасна употреба

Заключение: Maven не намира JAR файлове само по име. Той разрешава декларираните координати, изтегля POM на артефакта, следва описаните в него зависимости, прилага правилата за обхват и optional зависимости и избира версия, когато няколко пътя водят до различни версии.

Какво ще научите

  • Как локалното, централното, огледалните и частните хранилища участват в разрешаването.
  • Защо POM на зависимостта, а не самият JAR файл, описва повечето транзитивни зависимости.
  • Как да прегледате действителния граф на зависимостите, преди да замените версия.

За кого е статията: Потребители на Maven, които искат да разберат откъде идват изтеглените артефакти и защо се появяват допълнителни библиотеки.

Актуално към 2026 г.: По-старите координати на Apache POI по-долу са само исторически пример, а не препоръка за версия. Използвайте поддържани зависимости и доверени HTTPS хранилища, проверявайте контролните суми или подписите, когато са налични, и поддържайте политика за актуализиране на зависимостите.

Бележка за безопасност: Командите и конфигурационните примери в първоначалната статия не са изпълнявани повторно в съвременна производствена среда. Преди прилагане проверете поддържаните версии, направете резервно копие и подгответе план за връщане в отделна тестова среда.

Официални източници

Преглед

Maven автоматично изтегля JAR файлове от интернет, но по-долу е обяснено как точно става това.

Предпоставката на тази статия е, че трябва да разберете какво представлява Maven, така че ако не сте запознати със самия Maven, трябва да се обърнете и към следващата статия.

Какво е Maven и какво прави Maven?

Съдържание

  1. Способността на Maven да разрешава зависимостите на JAR библиотеките.
  2. Обобщение

1. Способността на Maven да разрешава зависимостите на JAR библиотеките.

Maven може автоматично да извлича JAR файловете, като просто дефинира необходимите JAR файлове във файла pom.xml. Той също така автоматично научава зависимите JAR файлове, необходими за стартирането на този JAR файл. По-долу е обяснено как работи.

1-1. Какво да се включи във файла pom.xml.

Първо, за да се разреши зависимостта на библиотеката jar, се предоставя информация във файла pom.xml. Maven обработва информацията от файла pom.xml. Ако например се изисква "poi-3.17.jar", той се описва в pom.xml по следния начин. (Между другото, 'poi-3.17.jar' е JAR файл, който се използва за манипулиране на файлове от Microsoft Office, като например Excel).

pom.xml


<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

Простото споменаване на горното ще изтегли "poi-3.17.jar" от интернет и също така ще изтегли съпътстващия jar от интернет, който е необходим за стартирането на "poi-3.17.jar".

1-2. Как се изтеглят от интернет?

Простото обяснение на системата е показано на схемата по-долу.

Хранилище на Maven.

Изтегляне от хранилищата на Maven, достъпни в интернет. Ако не е зададено нищо, стойността по подразбиране е Central Repository (Централно хранилище). URL адресът е следният.

https://repo1.maven.org/maven2/

Ако проявявате интерес, вижте следния уебсайт за списък с хранилища, достъпни в интернет.

https://mvnrepository.com/repos

Първия път JAR файлът се извлича от външно хранилище, но се копира в локалното хранилище и от втория път нататък не се извлича. Местоположението на локалното хранилище е "C:\Users\user\.m2".

Ако искате да промените дестинацията от стойността по подразбиране, можете да промените дестинацията, като включите следния таг за хранилище в pom.xml.

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", а в този файл ще намерите информация, че "poi-3.17.jar" зависи от "commons-collections4-4.1.jar". Това означава, че при извличането на 'poi-3.17.jar' системата извлича не само JAR файла, но и файла pom и проверява за други необходими JAR файлове.

2. резюме

Механизмът на Maven за разрешаване на зависимостите на JAR библиотеките е, че зависимостите се дефинират във файла pom, в който се съхраняват файловете jar, които трябва да бъдат извлечени.

Това са основните стъпки и ограничения, които трябва да имате предвид.