0Pricing
Java Academy · Lezione

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-Name nel 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.json

Strategia 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.java al modulo principale
  • Dichiari requires per 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-Name per ottenere nomi stabili
  • Presti attenzione ai package divisi e all'accesso tramite reflection; usi jdeps per 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

  1. module-info.java
  2. requires e exports
  3. Servizi con provides/uses
  4. Migrazione ai moduli
← Torna a Java Academy