Java Academy · Les

Migreren naar modules

Automatische en naamloze modules

Les 4 van 413 stappen

Migreren naar modules is een gratis Java Academy-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 Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Bestaande code modulariseren

Weinig projecten voeren vanaf het begin modules in. JPMS is ontworpen voor een geleidelijke migratie, waarbij classpath en modulepad naast elkaar kunnen bestaan.

De belangrijkste onderdelen zijn automatische modules en de naamloze module.

De naamloze module

Alles wat vanaf het classpath wordt geladen, leeft in de ene naamloze module. Deze leest elke andere module en exporteert al zijn pakketten.

Dit is de brug die ervoor zorgt dat oudere classpath-code blijft werken.

Benoemde modules kunnen naamloze modules niet lezen

Een belangrijke regel: een expliciet benoemde module kan niet afhankelijk zijn van de naamloze module. Je kunt geen requires schrijven voor classpath-code.

Daarom migreer je van onder naar boven: zet eerst de representatie van je afhankelijkheden om.

Automatische modules

Plaats een gewone, niet-modulaire JAR op het modulepad en deze wordt een automatische module. De module krijgt een automatisch afgeleide naam, leest alle andere modules en exporteert al zijn pakketten.

Zo kunnen benoemde modules een JAR met requires gebruiken terwijl die nog geen module-info heeft.

Waar de naam vandaan komt

De naam van een automatische module wordt afgeleid in deze volgorde:

  • De vermelding Automatic-Module-Name in het JAR-manifest, als die aanwezig is
  • Anders uit de bestandsnaam van de JAR, waarbij de versie wordt verwijderd en koppeltekens in punten worden veranderd

Stabiele namen zijn belangrijk

Auteurs van bibliotheken zouden Automatic-Module-Name aan hun manifest moeten toevoegen voordat ze volledig modulair worden. Zo beloven ze een stabiele modulenaam, zodat de requires-clausules van afhankelijke projecten blijven werken wanneer de uiteindelijke echte module-info wordt toegevoegd.

Automatic-Module-Name: com.example.json

Strategie van boven naar beneden

De aanbevolen aanpak voor je eigen toepassing:

  • Houd afhankelijkheden als automatische modules op het modulepad
  • Voeg eerst een module-info.java toe aan jouw bovenste module
  • Declareer requires voor de namen van die automatische modules

Voorbeeld van een migratiestap

Stel dat guava-32.jar als de automatische module com.google.common op het modulepad staat. Je toepassingsmodule kan er al een requires voor hebben.

module com.example.app {
    requires com.google.common;
    exports com.example.app.api;
}

Probleem met gesplitste pakketten

Het modulesysteem verbiedt dat twee modules hetzelfde pakket bevatten. Oudere bibliotheken die een pakket over meerdere JAR's verdelen, veroorzaken fouten.

Los dit op door de JAR's samen te voegen, --patch-module te gebruiken of te upgraden naar versies waarin het probleem met het gesplitste pakket is opgelost.

Problemen met toegang via reflectie

Raamwerken die diepe reflectie uitvoeren, kunnen na het modulariseren mislukken met InaccessibleObjectException. Voeg richtlijnen opens toe of gebruik tijdelijk de startoptie --add-opens.

Handig hulpmiddel jdeps

Het hulpmiddel jdeps analyseert je JAR's, rapporteert afhankelijkheden, markeert het gebruik van interne JDK-API's en kan zelfs een mogelijke module-info.java genereren met jdeps --generate-module-info.

Voer het eerst uit om je migratie te plannen.

Korte controle

Denk terug aan hoe een gewone JAR een module-identiteit krijgt.

Samenvatting

Je hebt migratietechnieken geleerd:

  • Classpath-code leeft in de naamloze module; benoemde modules kunnen er geen requires voor hebben
  • Gewone JAR's op het modulepad worden automatische modules
  • Stel Automatic-Module-Name in voor stabiele namen
  • Let op gesplitste pakketten en toegang via reflectie; gebruik jdeps om te plannen

Daarmee is de JPMS-cursus voltooid.

Gratis beginnen

Leer Java 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
104
Lessen
374

Veelgestelde vragen

Is de les “Migreren naar modules” gratis?

Ja — de volledige tekst van “Migreren naar modules” 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 Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “Migreren naar modules”?

Automatische en naamloze modules Je oefent met Java Academy 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 Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy 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 “Migreren naar modules”?

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 Java Academy?

Ja. Elke les over Java Academy 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. module-info.java
  2. requires en exports
  3. Services met provides/uses
  4. Migreren naar modules
← Terug naar Java Academy