Cum rezolvă Maven dependențele tranzitive din repository-uri


Data publicării:

Actualizat:


Articole tehnice > Cum rezolvă Maven dependențele tranzitive din repository-uri

Contextul din 2026 și utilizarea în siguranță

Concluzie: Maven nu caută JAR-uri arbitrare după numele fișierului. Rezolvă coordonatele declarate, descarcă artifactul și POM-ul aferent, urmărește dependențele tranzitive, aplică regulile de scope și folosește medierea când mai multe căi cer versiuni diferite.

Ce vei învăța

  • Rolul repository-urilor locale, centrale, mirror și private în rezolvare.
  • De ce POM-ul unei dependențe – nu JAR-ul în sine – descrie majoritatea cerințelor tranzitive.
  • Cum se inspectează graful efectiv înainte de înlocuirea unei versiuni.

Cui se adresează: Utilizatorilor Maven care vor să înțeleagă de unde provin artifactele descărcate și de ce apar JAR-uri suplimentare.

Contextul din 2026: Coordonatele mai vechi ale POI Apache de mai jos rămân utile ca exemplu istoric, nu ca recomandare de versiune. Utilizați dependențe actuale acceptate, repository-uri HTTPS de încredere, controale pentru sumă de verificare/semnătură acolo unde sunt disponibile și o politică de actualizare a dependențelor.

Notă de siguranță: Comenzile și configurațiile vechi nu au fost rulate din nou într-un mediu de producție actual. Verificați versiunile acceptate, copiile de rezervă, controalele de acces și pașii de rollback într-un mediu de testare separat.

Surse oficiale principale

Prezentare generală

Maven descarcă automat artifacte din repository-uri. Articolul explică ce informații citește din POM și cum identifică dependențele tranzitive.

Dacă nu cunoașteți încă rolul general al Maven, începeți cu articolul următor.

Ce este Apache Maven?

Cuprins

  1. Cum rezolvă Maven dependențele JAR
  2. Rezumat

1. Cum rezolvă Maven dependențele JAR

După declararea unei dependențe în pom.xml, Maven descarcă artifactul corespunzător și dependențele tranzitive necesare. Procesul pornește de la coordonate, nu de la numele fizic al fișierului JAR.

1-1. Declararea coordonatelor în pom.xml

O dependență este identificată în POM prin groupId, artifactId și version. Exemplul istoric de mai jos declară Apache POI 3.17, o bibliotecă folosită pentru prelucrarea documentelor Microsoft Office.

pom.xml


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

Pe baza declarației, Maven descarcă poi-3.17.jar și POM-ul publicat pentru aceeași versiune. Din acel POM află ce alte artifacte sunt necesare.

1-2. Descărcarea din repository-uri

Diagrama următoare prezintă pe scurt fluxul dintre repository-ul extern și cache-ul local.

Maven Repository.

Dacă proiectul și setările Maven nu indică altceva, artifactele publice sunt rezolvate din Maven Central.

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

Serviciul următor oferă o interfață de căutare pentru artifacte și repository-uri publice.

https://mvnrepository.com/repos

La prima rezolvare, Maven descarcă artifactul în repository-ul local. La execuțiile următoare îl poate reutiliza din cache; pe Windows, locația implicită se află sub "C:\Users\user\.m2\repository".

Pentru artifacte care nu se află în Maven Central, POM-ul poate declara un repository suplimentar, ca în exemplul următor. În proiectele reale, preferați HTTPS și administrați central politica de repository.

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. Rezolvarea dependențelor tranzitive

În exemplul folosit aici, poi-3.17.jar declară commons-collections4-4.1.jar ca dependență. Maven găsește această relație în POM-ul publicat al artifactului POI, disponibil în același director de repository.

https://repo1.maven.org/maven2/org/apache/poi/poi/3.17/

Fișierul poi-3.17.pom conține metadatele dependenței. Maven descarcă atât JAR-ul, cât și POM-ul, apoi repetă procesul pentru dependențele tranzitive, aplicând regulile de scope, opționalitate, excludere și mediere.

2. Rezumat

Maven pornește de la coordonatele declarate în proiect, consultă repository-urile configurate și citește POM-ul fiecărui artifact pentru a construi graful tranzitiv. Inspectați graful efectiv înainte de a forța o versiune sau de a adăuga o excludere.