Java Academy · leksjon

Migrere til moduler

Automatiske og navnløse moduler

Leksjon 4 av 413 trinn

Migrere til moduler er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Modularisering av eksisterende kode

Få prosjekter tar i bruk moduler fra første dag. JPMS er utformet for trinnvis migrering, slik at classpath og modulbanen kan eksistere side om side.

Nøkkelbegrepene er automatiske moduler og modulen uten navn.

Modulen uten navn

Alt som lastes fra classpath, ligger i den ene modulen uten navn. Den leser alle andre moduler og eksporterer alle pakkene sine.

Dette er broen som holder eldre classpath-kode fungerende.

Navngitte kan ikke lese modulen uten navn

En avgjørende regel er at en eksplisitt navngitt modul ikke kan være avhengig av modulen uten navn. Det er ikke mulig å skrive requires for classpath-kode.

Derfor migreres systemet nedenfra og opp: Konverter først representasjonen av avhengighetene.

Automatiske moduler

Plasser en vanlig JAR-fil (uten moduler) på modulbanen, så blir den en automatisk modul. Den får et automatisk avledet navn, leser alle andre moduler og eksporterer alle pakkene sine.

Dermed kan navngitte moduler bruke requires på en JAR-fil som ennå ikke har module-info.

Hvor navnet kommer fra

Navnet på en automatisk modul avledes i følgende prioritetsrekkefølge:

  • Oppføringen Automatic-Module-Name i JAR-manifestet, hvis den finnes
  • Ellers fra JAR-filnavnet (versjonen fjernes, og bindestreker erstattes med punktum)

Stabile navn er viktige

Bibliotekforfattere bør legge til Automatic-Module-Name i manifestet før biblioteket blir fullt modularisert. Det lover et stabilt modulnavn, slik at etterfølgende requires-setninger fortsatt fungerer når den endelige module-info tas i bruk.

Automatic-Module-Name: com.example.json

Strategi ovenfra og ned

Den anbefalte fremgangsmåten for Deres egen applikasjon:

  • Behold avhengighetene som automatiske moduler på modulbanen
  • Legg først til en module-info.java i toppmodulen Deres
  • Deklarer requires for navnene på disse automatiske modulene

Eksempel på et migreringstrinn

Anta at guava-32.jar ligger på modulbanen som den automatiske modulen com.google.common. Applikasjonsmodulen kan allerede kreve den.

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

Problemet med delte pakker

Modulsystemet forbyr at to moduler inneholder den samme pakken. Eldre biblioteker som deler en pakke på tvers av JAR-filer, fører til feil.

Problemet kan løses ved å slå sammen JAR-filene, bruke --patch-module eller oppgradere til versjoner som løser delingen.

Problemer med tilgang via refleksjon

Rammeverk som utfører dyp refleksjon, kan mislykkes med InaccessibleObjectException når De modulariserer. Legg til opens-direktiver eller bruk midlertidig oppstartsflagget --add-opens.

Det nyttige verktøyet jdeps

Verktøyet jdeps analyserer JAR-filene Deres, rapporterer avhengigheter, finner bruk av interne JDK-API-er og kan til og med generere et forslag til module-info.java med jdeps --generate-module-info.

Kjør det først for å planlegge migreringen.

Hurtigsjekk

Husk hvordan en vanlig JAR-fil får en modulidentitet.

Oppsummering

Dette har De lært om migreringsteknikker:

  • Classpath-kode ligger i modulen uten navn; navngitte moduler kan ikke bruke requires på den
  • Vanlige JAR-filer på modulbanen blir automatiske moduler
  • Angi Automatic-Module-Name for å få stabile navn
  • Vær oppmerksom på delte pakker og tilgang via refleksjon; bruk jdeps til planlegging

Dette fullfører JPMS-kurset.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Migrere til moduler» gratis?

Ja – hele teksten i «Migrere til moduler» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Migrere til moduler»?

Automatiske og navnløse moduler Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Migrere til moduler»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. module-info.java
  2. requires og exports
  3. Tjenester med provides/uses
  4. Migrere til moduler
← Tilbake til Java Academy