Share via


Runtime Java con jlink

Microsoft riconosce e supporta l'adozione di runtime Java personalizzati creati per specifiche esigenze dell'applicazione piuttosto che l'uso di runtime Java per utilizzo generico. Questo metodo di distribuzione Java garantisce che il runtime Java contenga solo le parti della piattaforma Java veramente necessarie per le applicazioni, aumentando quindi la sicurezza, riducendo le dimensioni della distribuzione e migliorando le prestazioni, sia per le applicazioni Java basate su cloud che per le applicazioni Java basate su server, nonché applicazioni desktop/GUI.

In genere, Oracle/Sun Microsystems produce programmi di installazione JRE (Java Runtime Environment) che contengono esclusivamente la macchina virtuale Java, le API Java e le integrazioni specifiche del sistema operativo e del browser, finalizzate all'abilitazione di computer per l'esecuzione di applicazioni Java scaricate da Internet o per l'esecuzione di applets e applicazioni Java Web Start tramite il browser.

Con l'avvento di moderne applicazioni Web e browser, le tecnologie Applets e Java Web Start sono diventate deprecate e i browser non supportano più i plug-in Java. La necessità di un ambiente Java Runtime per utilizzo generico preinstallato nei computer è diventata meno significativa nel tempo. Con Java 9, l'API Applet è diventata deprecata (vedere JEP 289) e con Java 17, l'API è diventata contrassegnata per la rimozione, ovvero verrà sicuramente rimossa in una versione futura di Java.

Un'altra modifica significativa è la modularizzazione di Java, avviata anche con la versione Java 9 (vedere JSR 376). Come parte di questa modifica, gli sviluppatori possono ora usare una riga di comando appena aggiunta nel JDK chiamato jlink per produrre un runtime Java personalizzato progettato appositamente per soddisfare le esigenze delle applicazioni, da distribuire come runtime incorporato predefinito insieme al codice dell'applicazione spesso come parte di un'immagine del contenitore per i carichi di lavoro basati sul cloud, o come parte dei programmi di installazione per le applicazioni basate su GUI.

Oggi Minecraft: Java Edition viene distribuito a milioni di giocatori Minecraft con un runtime Java personalizzato incorporato nel gioco. Dietro Servizi online come LinkedIn, Yammer, Bing e Azure, Microsoft distribuisce anche centinaia di migliaia di JVM usando questa tecnica.

Creare un runtime Java personalizzato

Per creare un runtime Java, è necessario che JDK 9 o versione successiva sia installato nell'ambiente. Scaricare e installare prima Microsoft Build di OpenJDK.

Identificare i moduli necessari con jdeps

La piattaforma Java è ora segmentata in moduli. Per un elenco completo, vedere la documentazione di Java 17 . Altre versioni di Java possono includere nuovi moduli.

Lo strumento jdeps JDK può essere usato per analizzare un .class file, una directory o un JAR file per identificare le dipendenze del modulo Java, le dipendenze interne JDK e altre informazioni utili che aiuteranno gli sviluppatori a produrre runtime Java.

$ cat HelloWorld.java
public class HelloWorld {
  public static void main(String args[]) {
    System.out.println("Hello World!");
  }
}

$ jdeps HelloWorld.class
HelloWorld.class -> java.base
   <unnamed>                                          -> java.io                                            java.base
   <unnamed>                                          -> java.lang                                          java.base

Lo strumento jdeps indica che questa classe dipende solo dai tipi nei java.lang pacchetti e java.io , pertanto, richiede solo il modulo java.base. Un output simile verrà prodotto per un JAR file come input. Con un elenco dei moduli necessari, è ora possibile creare un runtime Java.

Per creare un runtime Java da JDK, è necessario conoscere i moduli desiderati. Usare jdeps per identificarli. Per informazioni dettagliate sullo strumento da jlink riga di comando, vedere la documentazione.

Esempio:

$ jlink \
         --add-modules java.base \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

È ora possibile usare il runtime Java in /javaruntime per eseguire il codice dell'applicazione dipendente dal java.base modulo. La struttura della javaruntime cartella prodotta da jlink è simile alla struttura di directory JDK e lo java strumento da riga di comando per avviare la JVM si trova nella ./bin/ cartella come di consueto. Dato che un runtime Java personalizzato contiene tutti i moduli necessari di un'applicazione esistente, può essere fatto riferimento da JAVA_HOME.

$ /javaruntime/bin/java HelloWorld
Hello, World!

Nell'esempio precedente, il runtime Java prodotto in Windows utilizza circa 24 MB in Windows.

Creare un runtime Java con l'immagine del contenitore Docker

È possibile usare compilazioni multi-fase Docker per creare, usare e comprimere il runtime Java personalizzato come parte della compilazione dell'immagine. Vedere come creare runtime Java con Docker.

Knowledge Base

javax.net.ssl.SSLHandshakeException: Avviso irreversibile ricevuto: handshake_failure

Per una spiegazione su come risolvere questo problema, vedere Sicurezza e crittografia Java.

Risorse

Inviare commenti e suggerimenti su Microsoft Build of OpenJDK

Inviaci commenti, pensieri e idee per aiutarci a migliorare microsoft Build of OpenJDK. Visitare la pagina delle discussioni di OpenJDK su GitHub per inviare commenti e suggerimenti.

Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue consociate.