Groovy og Gradle: JVM-automatisering og buildudvikling · Lektion

Løsning af versionskonflikter og afhængighedsbegrænsninger

Diagnosticér og løs versionskonflikter mellem afhængigheder med dependency-rapporten, resolution-strategier, constraints og tvungne versioner.

Lektion 4 af 413 trin

Løsning af versionskonflikter og afhængighedsbegrænsninger er en gratis Groovy og Gradle: JVM-automatisering og buildudvikling-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Groovy og Gradle: JVM-automatisering og buildudvikling, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Groovy og Gradle: JVM-automatisering og buildudvikling-kurset indeholder 4 lektioner i alt.

Konfliktproblemet

To biblioteker, du afhænger af, kan hver især trække en anden version af den samme transitive afhængighed ind. Gradle skal vælge én — og det forkerte valg medfører fejl under kørsel. At håndtere dette er en central færdighed.

Standard: Den nyeste vinder

Som standard løser Gradle en konflikt ved at vælge den højeste ønskede version af en afhængighed i grafen. Det er som regel sikkert, men ikke altid.

Visning af afhængighedstræet

Opgaven dependencies udskriver hele den løste graf og viser, hvilken version der vandt, og hvorfor.

gradle dependencies --configuration runtimeClasspath

Forklaring af en enkelt afhængighed

Opgaven dependencyInsight forklarer præcist, hvordan én afhængighed blev løst, og hvem der ønskede hver version.

gradle dependencyInsight --dependency guava

Tving en version

Du kan tvinge en bestemt version og tilsidesætte konfliktløsningen med en løsningsstrategi.

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:32.1.3-jre'
    }
}

Begrænsninger for afhængigheder

Den moderne tilgang bruger constraints til at erklære en tilladt version uden at tilføje afhængigheden direkte — det er renere end at tvinge en version.

dependencies {
    constraints {
        implementation 'com.google.guava:guava:32.1.3-jre'
    }
}

Udelukkelse af transitive afhængigheder

Nogle gange er en transitiv afhængighed helt uønsket. Udeluk den fra den afhængighed, der trækker den ind.

implementation('org.example:lib:1.0') {
    exclude group: 'commons-logging'
}

Afvisning af ugyldige versioner

En løsningsstrategi kan afvise kendte fejlbehæftede versioner, så Gradle aldrig vælger dem.

resolutionStrategy {
    componentSelection {
        all { if (candidate.version == '1.2.0') reject('known bug') }
    }
}

Build-fejl ved konflikt

Hvis du har brug for streng reproducerbarhed, kan du få Gradle til at afbryde buildet, hver gang der opstår en versionskonflikt, så du tvinges til at løse den eksplicit.

resolutionStrategy { failOnVersionConflict() }

Låsning af afhængigheder

Låsning af afhængigheder skriver de løste versioner til en låsefil, så builds kan genskabes nøjagtigt på tværs af maskiner og tid.

gradle dependencies --write-locks

Platforme og BOM'er

Importér en publiceret BOM med notationen platform for at samle mange relaterede afhængigheder på ét testet versionssæt og undgå manuel håndtering af versioner.

dependencies {
    implementation platform('org.springframework.boot:spring-boot-dependencies:3.2.0')
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

Hurtigt tjek

Test din viden om konfliktløsning.

Opsummering

Du har lært at håndtere versionskonflikter:

  • Standardløsningen vælger den højeste version
  • Undersøg med dependencies og dependencyInsight
  • Tilsidesæt med force eller helst constraints
  • exclude fjerner uønskede transitive afhængigheder; afvisning blokerer ugyldige versioner
  • Låsning af afhængigheder gør builds reproducerbare
Gratis at komme i gang

Lær Groovy med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Løsning af versionskonflikter og afhængighedsbegrænsninger” gratis?

Ja — hele teksten til “Løsning af versionskonflikter og afhængighedsbegrænsninger” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Groovy og Gradle: JVM-automatisering og buildudvikling-kurset, skal du opgradere til CoddyKit PRO. Groovy og Gradle: JVM-automatisering og buildudvikling-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Løsning af versionskonflikter og afhængighedsbegrænsninger”?

Diagnosticér og løs versionskonflikter mellem afhængigheder med dependency-rapporten, resolution-strategier, constraints og tvungne versioner. Du øver dig i Groovy og Gradle: JVM-automatisering og buildudvikling med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Groovy og Gradle: JVM-automatisering og buildudvikling?

Der kræves ingen tidligere erfaring. Groovy og Gradle: JVM-automatisering og buildudvikling på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Løsning af versionskonflikter og afhængighedsbegrænsninger”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Groovy og Gradle: JVM-automatisering og buildudvikling-lektion?

Ja. Alle Groovy og Gradle: JVM-automatisering og buildudvikling-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Deklaration af projektafhængigheder
  2. Afhængighedsopløsning og caching
  3. Brugerdefinerede repositories og BOM'er
  4. Løsning af versionskonflikter og afhængighedsbegrænsninger
← Tilbage til Groovy og Gradle: JVM-automatisering og buildudvikling