Groovy en Gradle: JVM-automatisering en buildbeheer · Les

Dependencies tussen projecten

Beheer dependencies tussen subprojecten en zorg voor de juiste buildvolgorde en artifactresolutie.

Les 3 van 411 stappen

Dependencies tussen projecten is een gratis Groovy en Gradle: JVM-automatisering en buildbeheer-les op CoddyKit. Dit is les 3 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.

Inleiding tot projectafhankelijkheden

In een Gradle-build met meerdere projecten moeten verschillende deelprojecten vaak samenwerken. Een deelproject kan bijvoorbeeld een bibliotheek produceren die een ander deelproject gebruikt.

Daar komen afhankelijkheden tussen projecten van pas! Ze bepalen hoe deelprojecten van elkaar afhankelijk zijn, zodat de juiste buildvolgorde en het delen van artefacten worden gewaarborgd.

  • Afhankelijkheden tussen projecten: Hoe een deelproject code of uitvoer van een ander deelproject gebruikt.
  • Essentieel voor modulaire toepassingen.

Een basisafhankelijkheid declareren

In Gradle is het eenvoudig om te declareren dat het ene deelproject afhankelijk is van een ander. Je gebruikt de functie project() in je blok dependencies.

Als je deelproject app bijvoorbeeld code uit je deelproject lib nodig heeft, voeg je dit toe aan app/build.gradle:

// app/build.gradle
dependencies {
    implementation project(':lib')
}

Het gedeelte :lib verwijst naar het pad van het deelproject lib ten opzichte van de hoofdmap.

Ons voorbeeld instellen

Stel je een eenvoudige configuratie met meerdere projecten voor. We hebben een hoofdproject, een deelproject app en een deelproject lib.

Je settings.gradle ziet er zo uit:

// settings.gradle
rootProject.name = 'my-multi-project'
include 'app', 'lib'

Hiermee informeer je Gradle over onze twee deelprojecten, app en lib.

`implementation` versus `api`

Bij het declareren van afhankelijkheden tussen projecten gebruik je meestal configuraties zoals implementation of api.

  • implementation: De meest gebruikelijke keuze. De afhankelijkheid wordt intern door het deelproject gebruikt en niet beschikbaar gesteld aan gebruikers van dat deelproject.
  • api: Stelt de afhankelijkheid beschikbaar aan gebruikers. Als app via api afhankelijk is van lib en otherApp afhankelijk is van app, ziet otherApp ook de API van lib.

Voor intern gebruik tussen deelprojecten heeft implementation over het algemeen de voorkeur vanwege betere inkapseling en snellere builds.

Het bibliotheekdeelproject (`lib`)

Maak eerst een eenvoudige klasse in ons deelproject lib die het deelproject app zal gebruiken. Deze klasse biedt een basishulpmiddel.

In lib/src/main/groovy/com/coddykit/LibUtils.groovy:

package com.coddykit

class LibUtils {
    static String getGreeting() {
        return "Hello from LibUtils!"
    }
}

De code van `lib` gebruiken in het app-deelproject

Laat ons deelproject app nu de klasse LibUtils uit ons deelproject lib gebruiken. Vergeet niet dat we implementation project(':lib') hebben gedeclareerd in app/build.gradle.

Probeer dit voorbeeld uit te voeren:

package com.coddykit

import com.coddykit.LibUtils

class AppMain {
    static void main(String[] args) {
        String message = LibUtils.getGreeting()
        System.out.println(message)
    }
}

Automatische buildvolgorde

Een van de grootste voordelen van het declareren van afhankelijkheden tussen projecten is dat Gradle automatisch de juiste buildvolgorde bepaalt.

  • Als app afhankelijk is van lib, zorgt Gradle ervoor dat lib wordt gecompileerd en dat de artefacten beschikbaar zijn voordat app met compileren begint.
  • Zo hoef je buildvolgordes niet handmatig te beheren, vooral niet in complexe configuraties met meerdere projecten.

Wanneer je vanuit de hoofdmap gradle build uitvoert, bouwt Gradle eerst lib en daarna app.

Transitieve effecten begrijpen

Wat gebeurt er als je deelproject lib zelf afhankelijk is van een ander deelproject, bijvoorbeeld common?

// lib/build.gradle
dependencies {
    implementation project(':common')
}

// app/build.gradle
dependencies {
    implementation project(':lib')
}

Als app afhankelijk is van lib en lib afhankelijk is van common, zorgt Gradle er ook voor dat common wordt gebouwd en dat de artefacten transitief beschikbaar zijn op het classpath van app voor compilatie. Ze zijn echter niet noodzakelijk beschikbaar in de API van app als lib implementation gebruikt.

Afhankelijkheden overzichtelijk houden

Volg deze best practices om je builds met meerdere projecten beheersbaar en efficiënt te houden:

  • Minimale afhankelijkheden: Declareer alleen afhankelijkheden voor deelprojecten die je echt nodig hebt.
  • Gebruik implementation: Geef voor interne afhankelijkheden tussen deelprojecten de voorkeur aan implementation boven api om de inkapseling te verbeteren en herbouwen te beperken.
  • Duidelijke grenzen: Ontwerp je deelprojecten met duidelijke verantwoordelijkheden om circulaire afhankelijkheden te voorkomen.
  • Vermijd diepe paden: Houd paden naar deelprojecten beknopt. :module:submodule is bijvoorbeeld prima, maar vermijd onnodig lange paden.

Controle van afhankelijkheidsdeclaraties

Je hebt een build met meerdere projecten, met een deelproject web en een deelproject core. Het deelproject web moet klassen uit het deelproject core gebruiken voor zijn interne logica, maar mag de API van core niet beschikbaar stellen aan verdere gebruikers van web.

Samenvatting van afhankelijkheden tussen projecten

Goed gedaan! In deze les heb je geleerd hoe je afhankelijkheden tussen deelprojecten in een Gradle-build met meerdere projecten beheert.

  • We hebben besproken hoe je afhankelijkheden declareert met project(':subproject').
  • We hebben het belang van implementation voor intern gebruik besproken.
  • Je hebt gezien hoe Gradle automatisch de buildvolgorde beheert.
  • We hebben best practices voor overzichtelijk afhankelijkheidsbeheer behandeld.

Het beheersen van afhankelijkheden tussen projecten is essentieel om grote, modulaire toepassingen efficiënt met Gradle te bouwen!

Gratis beginnen

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 “Dependencies tussen projecten” gratis?

Ja — de volledige tekst van “Dependencies tussen projecten” 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 “Dependencies tussen projecten”?

Beheer dependencies tussen subprojecten en zorg voor de juiste buildvolgorde en artifactresolutie. 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 3 van 4.

Hoe lang duurt de les “Dependencies tussen projecten”?

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

  1. Monorepo-projectstructuur
  2. Subprojecten en configuraties
  3. Dependencies tussen projecten
  4. Composite builds en buildcompositie
← Terug naar Groovy en Gradle: JVM-automatisering en buildbeheer