Migrazione ai moduli
Moduli automatici e senza nome
Migrazione ai moduli è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Modularizzare il codice esistente
Pochi progetti adottano i moduli fin dall'inizio. JPMS è stato progettato per una migrazione graduale, consentendo la coesistenza di classpath e module path.
Gli elementi fondamentali sono i moduli automatici e il modulo senza nome.
Il modulo senza nome
Tutto ciò che viene caricato dal classpath vive nell'unico modulo senza nome. Esso legge ogni altro modulo ed esporta tutti i suoi package.
Questo è il ponte che mantiene funzionante il codice legacy sul classpath.
Un modulo denominato non può leggere il modulo senza nome
Una regola fondamentale: un modulo denominato esplicito non può dipendere dal modulo senza nome. Non si può scrivere requires per il codice sul classpath.
Quindi migri dal basso verso l'alto: prima converta la rappresentazione delle dipendenze.
Moduli automatici
Inserisca un JAR semplice (non modulare) nel module path e diventerà un modulo automatico. Gli verrà assegnato un nome derivato automaticamente, leggerà tutti gli altri moduli ed esporterà tutti i suoi package.
In questo modo i moduli denominati possono dichiarare requires per un JAR che non contiene ancora module-info.
Da dove deriva il nome
Il nome di un modulo automatico viene derivato secondo questo ordine di preferenza:
- La voce
Automatic-Module-Namenel manifest del JAR, se presente - Altrimenti, dal nome del file JAR (versione rimossa, trattini convertiti in punti)
L'importanza dei nomi stabili
Gli autori di librerie dovrebbero aggiungere Automatic-Module-Name al manifest prima di modularizzare completamente. In questo modo garantiscono un nome di modulo stabile, così le clausole requires dei moduli dipendenti rimangono valide quando arriverà il vero module-info.
Automatic-Module-Name: com.example.jsonStrategia top-down
L'approccio consigliato per la propria applicazione è il seguente:
- Mantenga le dipendenze come moduli automatici nel module path
- Aggiunga prima un
module-info.javaal modulo principale - Dichiari
requiresper i nomi di quei moduli automatici
Un passaggio della migrazione
Supponga che guava-32.jar si trovi nel module path come modulo automatico com.google.common. Il modulo dell'applicazione può già dichiarare di richiederlo.
module com.example.app {
requires com.google.common;
exports com.example.app.api;
}Il problema dei package divisi
Il sistema dei moduli vieta che due moduli contengano lo stesso package. Le vecchie librerie che suddividono un package tra più JAR causano errori.
Risolva unendo i JAR, usando --patch-module oppure eseguendo l'upgrade a versioni che eliminano la divisione.
Problemi di accesso tramite reflection
I framework che usano la reflection profonda possono non funzionare con InaccessibleObjectException dopo la modularizzazione. Aggiunga direttive opens oppure, come ponte temporaneo, il flag di avvio --add-opens.
Il pratico strumento jdeps
Lo strumento jdeps analizza i JAR, segnala le dipendenze, rileva l'uso di API interne del JDK e può persino generare un module-info.java candidato con jdeps --generate-module-info.
Lo esegua per primo per pianificare la migrazione.
Verifica rapida
Ricordi come un JAR semplice acquisisce un'identità di modulo.
Riepilogo
Ha appreso le tecniche di migrazione:
- Il codice sul classpath vive nel modulo senza nome; i moduli denominati non possono dichiarare requires per esso
- I JAR semplici nel module path diventano moduli automatici
- Imposti
Automatic-Module-Nameper ottenere nomi stabili - Presti attenzione ai package divisi e all'accesso tramite reflection; usi
jdepsper pianificare
Il corso su JPMS è completo.
Domande Frequenti
La lezione «Migrazione ai moduli» è gratuita?
Sì — il testo completo di «Migrazione ai moduli» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Migrazione ai moduli»?
Moduli automatici e senza nome Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Migrazione ai moduli»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- module-info.java
- requires e exports
- Servizi con provides/uses
- Migrazione ai moduli