Migreren naar modules
Automatische en naamloze modules
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-Namein 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.jsonStrategie van boven naar beneden
De aanbevolen aanpak voor je eigen toepassing:
- Houd afhankelijkheden als automatische modules op het modulepad
- Voeg eerst een
module-info.javatoe aan jouw bovenste module - Declareer
requiresvoor 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-Namein voor stabiele namen - Let op gesplitste pakketten en toegang via reflectie; gebruik
jdepsom te plannen
Daarmee is de JPMS-cursus voltooid.
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
- module-info.java
- requires en exports
- Services met provides/uses
- Migreren naar modules