Partager via


Runtimes Java avec Jlink

Microsoft reconnaît et prend en charge l’adoption de runtimes Java personnalisés conçus pour les besoins d’application spécifiques plutôt que l’utilisation de runtimes Java à usage général. Cette méthode de déploiement Java garantit que le runtime Java contient uniquement les parties de la plateforme Java qui sont réellement nécessaires aux applications, ce qui renforce la sécurité, réduit la taille du déploiement et améliore les performances tant pour les applications Java cloud que pour les applications Java basées sur un serveur et les applications Java de bureau/d’interface graphique utilisateur.

Oracle/Sun Microsystems produit traditionnellement des programmes d’installation JRE (Java Runtime Environment) qui contiennent uniquement la machine virtuelle Java, les API Java et les intégrations spécifiques au système d’exploitation et au navigateur, destinés à permettre aux ordinateurs d’exécuter les applications Java téléchargées à partir d’Internet ou d’exécuter des applets et des applications Java Web Start via le navigateur.

Avec l’avènement des applications et des navigateurs web modernes, les technologies d’applets et Java Web Start sont désormais déconseillées, et les navigateurs ne prennent plus en charge les plug-ins Java. La nécessité d’un Java Runtime Environnement à usage général préinstallé sur les ordinateurs est devenu moins importante au fil du temps. Avec Java 9, l’API Applet est devenue déconseillée (voir JEP 289) et avec Java 17, l’API a été marquée pour suppression, ce qui signifie qu’elle sera certainement supprimée sur une prochaine version de Java.

Un autre changement important est la modularisation de Java, également démarrée avec la version Java 9 (voir JSR 376). Dans le cadre de ce changement, les développeurs peuvent désormais utiliser une ligne de commande appelée jlink nouvellement ajoutée dans le JDK pour produire un runtime Java personnalisé, spécifiquement conçu pour répondre aux besoins des applications. Ce runtime doit être déployé en tant que runtime intégré parallèlement au code d’application, le plus souvent dans le cadre d’une image conteneur pour les charges de travail basées sur le cloud ou dans le cadre des programmes d’installation pour les applications basées sur l’interface graphique utilisateur.

Aujourd’hui, Minecraft : Java Edition est déployé pour des millions de joueurs avec un runtime Java personnalisé incorporé dans le jeu. Derrière les services en ligne tels que LinkedIn, Yammer, Bing et Azure, Microsoft déploie également des centaines de milliers de machines virtuelles Java en utilisant cette technique.

Créer un runtime Java personnalisé

Pour créer un runtime Java, vous devez avoir JDK 9 ou une version ultérieure installée dans votre environnement. Téléchargez et installez d’abord le build Microsoft d’OpenJDK.

Identifier les modules requis avec jdeps

La plateforme Java est désormais segmentée en modules. Consultez la documentation de Java 17 pour obtenir une liste complète ; d’autres versions de Java peuvent inclure de nouveaux modules.

L’outil JDK jdeps peut être utilisé pour analyser un fichier .class, un répertoire ou un fichier JAR, pour identifier les dépendances de module Java, les dépendances internes JDK et d’autres informations utiles qui aideront les développeurs à produire des runtimes 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

L’outil jdeps indique que cette classe dépend uniquement des types dans les packages java.lang et java.io. Il n’a donc besoin que du module java.base. Une sortie similaire serait produite pour un fichier JAR comme entrée. Avec la liste des modules requis, vous pouvez maintenant créer un runtime Java.

Pour créer un runtime Java à partir du JDK, vous devez savoir quels modules vous souhaitez. Utilisez jdeps pour les identifier. Pour plus d’informations sur l’outil de ligne de commande jlink, veuillez consulter la documentation.

Exemple :

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

Vous pouvez maintenant utiliser le runtime Java situé à /javaruntime pour exécuter le code de l’application en fonction du module java.base. La structure du dossier javaruntime produit par jlink est similaire à la structure du répertoire JDK, et l’outil de ligne de commande java pour démarrer la machine virtuelle Java se trouve comme d’habitude dans le dossier ./bin/. Étant donné qu’un runtime Java personnalisé contient tous les modules requis d’une application existante, il peut être référencé par JAVA_HOME.

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

Dans l’exemple ci-dessus, le runtime Java produit sur Windows consomme environ 24 Mo sur Windows.

Créer un runtime Java avec une image conteneur Docker

Vous pouvez utiliser des builds multi-étapes Docker pour créer, consommer et compresser le runtime Java personnalisé dans le cadre de votre build d’image. Consultez Comment créer des runtimes Java à l’aide de Docker.

Base de connaissances

javax.net.ssl.SSLHandshakeException : alerte irrécupérable reçue : handshake_failure

Consultez Sécurité et chiffrement Java pour obtenir une explication sur la façon de résoudre ce problème.

Ressources

Fournir des commentaires sur la build Microsoft d’OpenJDK

Envoyez-nous vos commentaires, vos pensées et vos idées pour nous aider à améliorer la build Microsoft d’OpenJDK. Consultez notre page de discussions OpenJDK sur GitHub pour nous faire part de vos commentaires.

Java et OpenJDK sont des marques ou des marques déposées d’Oracle et/ou de ses affiliés.