Så löser Maven transitiva beroenden via repositories


Publicerad:

Uppdaterad:


Tekniska artiklar > Så löser Maven transitiva beroenden via repositories

Status 2026 och säker användning

Slutsats: Maven utgår från deklarerade koordinater, hämtar artefaktens POM och följer dess beroenden. Scope, optional-markeringar och versionsmedling avgör vilka transitiva beroenden som faktiskt tas med.

Det här går artikeln igenom

  • Hur lokala, centrala, speglade och privata repositories deltar i upplösningen.
  • Varför ett beroendes POM – inte själva JAR – beskriver de flesta transitiva kraven.
  • Hur den faktiska beroendegrafen granskas innan en version åsidosätts.

Målgrupp: Maven-användare som vill förstå var nedladdade artefakter kommer ifrån och varför ytterligare bibliotek dyker upp.

Läge 2026: De gamla koordinaterna för Apache POI nedan är ett historiskt exempel, inte en versionsrekommendation. Använd aktuella beroenden med support, betrodda repositories via HTTPS, kontrollsummor eller signaturer där sådana finns samt en fastställd rutin för beroendeuppdateringar.

Säkerhetsinformation: Kommandona och konfigurationsexemplen i originalartikeln har inte testats på nytt i en aktuell produktionsmiljö. Kontrollera versioner med support, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan de används.

Viktiga officiella källor

Översikt

Maven löser deklarerade beroenden och hämtar deras artefakter och POM-filer från konfigurerade repositories. Här beskrivs mekanismen bakom upplösningen.

Artikeln förutsätter grundläggande kunskap om Maven. Läs gärna följande introduktion först om verktyget är obekant.

Vad är Apache Maven? POM, livscykler och beroendehantering

Innehållsförteckning

  1. Så löser Maven beroenden mellan JAR-bibliotek
  2. Sammanfattning

1. Så löser Maven beroenden mellan JAR-bibliotek

När ett nödvändigt bibliotek deklareras i pom.xml hämtar Maven dess JAR-fil automatiskt. Maven följer dessutom bibliotekets POM och hämtar de transitiva beroenden som behövs.

1-1. Vad ska anges i pom.xml?

Beroendena deklareras i pom.xml med groupId, artifactId och version, som tillsammans identifierar artefakten. Exemplet nedan använder Apache POI 3.17, ett äldre bibliotek för att bearbeta bland annat Microsoft Office-filer som Excel-arbetsböcker.

pom.xml


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

Med deklarationen ovan hämtar Maven både POI-artefakten och dess POM. Därefter följer Maven de beroenden som POM-filen deklarerar och hämtar de ytterligare artefakter som behövs.

1-2. Hur hämtar Maven artefakter från repositories?

Diagrammet nedan visar det grundläggande flödet.

Flöde mellan ett fjärrrepository och det lokala Maven-repositoryt.

Artefakterna hämtas från ett Maven-repository. Maven Central används normalt om inte exempelvis en mirror eller annan inställning i settings.xml styr trafiken till ett annat repository.

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

Följande tredjepartstjänst listar publika repositories. Kontrollera repositoryts ägare och använd betrodd HTTPS-konfiguration innan det läggs till i en build.

https://mvnrepository.com/repos

Vid den första upplösningen hämtas artefakten och dess POM från ett fjärrrepository och sparas i det lokala repositoryt. Senare buildar kan använda den lokala kopian enligt Mavens uppdateringspolicy. I det här Windows-exemplet ligger det lokala repositoryt under "C:\Users\user\.m2\repository".

Ett annat repository kan anges med följande repository-element i 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. Hur löses transitiva beroenden?

I exemplet kräver "poi-3.17.jar" även "commons-collections4-4.1.jar". Beroendeinformationen finns tillsammans med POI-artefakten i Maven-repositoryt på följande adress.

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

Filen "poi-3.17.pom" deklarerar bland annat koordinaterna för Commons Collections. Maven läser varje hämtad POM rekursivt och tillämpar regler för scope, optional-markeringar, exclusions och versionsmedling när den bygger den effektiva beroendegrafen.

2. Sammanfattning

Maven löser beroenden genom att läsa artefakternas POM-filer och följa deklarationerna vidare. JAR-filen innehåller normalt klasser och resurser, medan beroendemetadata kommer från den tillhörande POM-filen.

Artefakterna hämtas från konfigurerade repositories och sparas i det lokala repositoryt. Den effektiva beroendegrafen kan sedan granskas för att se vilka deklarationer och medlingsregler som valde varje version.