Så löser Maven transitiva beroenden från repositoryn


Datum för offentliggörande:

Uppdaterad:


Tekniska artiklar > Så löser Maven transitiva beroenden från repositoryn

2026 status och säker användning

Slutsats: Maven upptäcker inte godtyckliga JAR efter filnamn. Den löser deklarerade koordinater, laddar ner artefakten POM, följer POM:s beroenden, tillämpar omfattning och valfria regler och använder beroendemedling när flera sökvägar begär olika versioner.

Vad du kommer att lära dig

  • Hur lokala, centrala, mirror- och privata arkiv deltar i upplösningen.
  • Varför ett beroendes POM – inte själva JAR – beskriver de flesta transitiva kraven.
  • Hur du inspekterar den effektiva grafen innan du åsidosätter en version.

Vem detta är till för: Maven-användare som vill förstå var nedladdade artefakter kommer ifrån och varför extra bibliotek dyker upp.

2026-kontext: De äldre Apache POI-koordinaterna nedan förblir användbara som ett historiskt exempel, inte en versionsrekommendation. Använd aktuella beroenden som stöds, betrodda HTTPS-lager, kontrollsumma/signaturkontroller där sådana finns och en policy för uppdatering av beroenden.

Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.

Viktiga officiella källor

Översikt.

Maven hämtar automatiskt jars från internet, men jag vill förklara exakt hur det fungerar.

Utgångspunkten för den här artikeln är att du måste förstå vad Maven är, så om du inte är bekant med Maven bör du också läsa följande artikel.

Vad är Maven och vad gör Maven?

Innehållsförteckning

  1. Mavens förmåga att lösa beroenden av JAR-bibliotek.
  2. sammanfattning

1. Mavens förmåga att lösa beroenden av JAR-bibliotek.

Maven kan automatiskt hämta JAR-filerna genom att helt enkelt definiera de nödvändiga JAR-filerna i filen pom.xml. Den lär sig också automatiskt vilka beroende jars som behövs för att köra denna jar. Jag vill förklara hur det fungerar.

1-1. Vad som ska ingå i pom.xml-filen.

För att lösa beroendet av JAR-biblioteket finns information i filen pom.xml. Maven bearbetar informationen från filen pom.xml. Om till exempel "poi-3.17.jar" krävs beskrivs den i pom.xml på följande sätt. (För övrigt är "poi-3.17.jar" en JAR som används för att manipulera Microsoft Office-filer som Excel.)

pom.xml


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

Om du bara nämner ovanstående kommer du att ladda ner "poi-3.17.jar" från Internet och även ladda ner den medföljande JAR från Internet som krävs för att köra "poi-3.17.jar".

1-2. Hur hämtas de från internet?

En enkel förklaring av systemet visas i diagrammet nedan.

Maven Repository.

Ladda ner från Maven-repositoryn som finns på Internet. Om inget anges är standardvärdet Central Repository. URL:n är följande.

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

På följande webbplats finns en lista över arkiv som är tillgängliga på Internet om du är intresserad.

https://mvnrepository.com/repos

Första gången hämtas JAR-filen från ett externt repository, men den kopieras till det lokala repositoryt och hämtas inte från och med andra gången. Platsen för det lokala repositoryt är "C:\Users\user\.m2".

Om du vill ändra destinationen från standardvärdet kan du också ändra destinationen genom att inkludera följande tagg för repository 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. Mekanismer för att lösa beroenden av JAR-filen som ska hämtas.

Vi har just beskrivit ett exempel på att få fram "poi-3.17.jar", men "poi-3.17.jar" kräver "commons-collections4-4.1.jar" för att kunna köras. Detta innebär att "poi-3.17.jar" är beroende av "commons-collections4-4.1.jar". Mekanismen för att lösa detta beroende finns i Maven-repositoryt där poi-3.17.jar lagras. URL:n är följande.

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

Jag tror att "poi-3.17.pom" lagras, och i denna fil finns information om att "poi-3.17.jar" är beroende av "commons-collections4-4.1.jar". Detta innebär att när systemet hämtar "poi-3.17.jar" hämtar det inte bara JAR-filen, utan även pom-filen och kontrollerar om det finns andra nödvändiga JAR-filer.

2. sammanfattning

Mavens mekanism för att lösa beroenden på JAR-bibliotek är att beroenden definieras i pom-filen där de JAR-filer som ska hämtas lagras.

Tack för att du tittade på till slutet.