Versieconflicten en dependencybeperkingen oplossen
Stel conflicten tussen dependencyversies vast en los ze op met het dependencyrapport, resolutionstrategieën, constraints en geforceerde versies.
Versieconflicten en dependencybeperkingen oplossen is een gratis Groovy en Gradle: JVM-automatisering en buildbeheer-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Groovy en Gradle: JVM-automatisering en buildbeheer. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Groovy en Gradle: JVM-automatisering en buildbeheer bevat in totaal 4 lessen.
Het probleem met conflicten
Twee bibliotheken waarvan u afhankelijk bent, kunnen elk een andere versie van dezelfde transitieve afhankelijkheid binnenhalen. Gradle moet er één kiezen — en de verkeerde keuze veroorzaakt fouten tijdens runtime. Dit beheren is een essentiële vaardigheid.
Standaard: de nieuwste wint
Standaard lost Gradle een conflict op door de hoogste aangevraagde versie van een afhankelijkheid in de hele graaf te kiezen. Meestal veilig, maar niet altijd.
De afhankelijkheidsboom bekijken
De taak dependencies drukt de volledige opgeloste graaf af en toont welke versie heeft gewonnen en waarom.
gradle dependencies --configuration runtimeClasspathEén afhankelijkheid uitleggen
De taak dependencyInsight legt precies uit hoe één afhankelijkheid is opgelost en wie elke versie heeft aangevraagd.
gradle dependencyInsight --dependency guavaEen versie afdwingen
U kunt met een oplossingsstrategie een specifieke versie afdwingen, waarmee u de conflictoplossing overschrijft.
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:32.1.3-jre'
}
}Beperkingen voor afhankelijkheden
De moderne aanpak gebruikt constraints om een toegestane versie te declareren zonder de afhankelijkheid rechtstreeks toe te voegen — schoner dan een versie afdwingen.
dependencies {
constraints {
implementation 'com.google.guava:guava:32.1.3-jre'
}
}Transitieve afhankelijkheden uitsluiten
Soms is een transitieve afhankelijkheid helemaal niet gewenst. Sluit deze uit bij de afhankelijkheid die haar binnenhaalt.
implementation('org.example:lib:1.0') {
exclude group: 'commons-logging'
}Ongeldige versies afwijzen
Een oplossingsstrategie kan bekende defecte versies afwijzen, zodat Gradle ze nooit selecteert.
resolutionStrategy {
componentSelection {
all { if (candidate.version == '1.2.0') reject('known bug') }
}
}Bij conflicten mislukken
Voor strikt reproduceerbare builds kunt u Gradle opdracht geven de build te laten mislukken zodra er een versieconflict optreedt. Zo moet u het conflict expliciet oplossen.
resolutionStrategy { failOnVersionConflict() }Afhankelijkheden vergrendelen
Het vergrendelen van afhankelijkheden schrijft opgeloste versies naar een lockbestand, zodat builds op verschillende machines en momenten volledig reproduceerbaar zijn.
gradle dependencies --write-locksPlatforms en BOM's
Importeer een gepubliceerde BOM met de notatie platform om veel gerelateerde afhankelijkheden op één geteste verzameling versies af te stemmen. Zo hoeft u versies niet handmatig op elkaar af te stemmen.
dependencies {
implementation platform('org.springframework.boot:spring-boot-dependencies:3.2.0')
implementation 'org.springframework.boot:spring-boot-starter-web'
}Korte controle
Test uw kennis van conflictoplossing.
Samenvatting
U hebt geleerd hoe u versieconflicten beheert:
- De standaardoplossing kiest de hoogste versie
- Inspecteer afhankelijkheden met
dependenciesendependencyInsight - Overschrijf de keuze met
forceof, bij voorkeur,constraints excludeverwijdert ongewenste transitieve afhankelijkheden; afwijzen blokkeert ongeldige versies- Het vergrendelen van afhankelijkheden maakt builds reproduceerbaar
Leer Groovy met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Versieconflicten en dependencybeperkingen oplossen” gratis?
Ja — de volledige tekst van “Versieconflicten en dependencybeperkingen oplossen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Groovy en Gradle: JVM-automatisering en buildbeheer wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Groovy en Gradle: JVM-automatisering en buildbeheer bevat in totaal 4 lessen.
Wat leer ik in “Versieconflicten en dependencybeperkingen oplossen”?
Stel conflicten tussen dependencyversies vast en los ze op met het dependencyrapport, resolutionstrategieën, constraints en geforceerde versies. Je oefent met Groovy en Gradle: JVM-automatisering en buildbeheer door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Groovy en Gradle: JVM-automatisering en buildbeheer te beginnen?
Ervaring vooraf is niet nodig. Groovy en Gradle: JVM-automatisering en buildbeheer op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Versieconflicten en dependencybeperkingen oplossen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Groovy en Gradle: JVM-automatisering en buildbeheer?
Ja. Elke les over Groovy en Gradle: JVM-automatisering en buildbeheer bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Projectdependencies declareren
- Dependencyresolutie en caching
- Aangepaste repositories en BOM's
- Versieconflicten en dependencybeperkingen oplossen