Runtimes Java avec jlink

Microsoft reconnaît et prend en charge l’adoption de runtimes Java personnalisés conçus pour des 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 par les applications, ce qui augmente 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 le serveur et pour les applications Java de bureau/interface utilisateur.

Traditionnellement, Oracle/Sun Microsystems produit 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ées à permettre aux ordinateurs d’exécuter des applications Java téléchargées à partir d’Internet, ou d’exécuter des applications Applets et Java Web Start via le navigateur.

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

Une autre modification significative est la modularisation de Java, également démarrée avec la version Java 9 (voir JSR 376). Dans le cadre de cette modification, les développeurs peuvent désormais utiliser une ligne de commande nouvellement ajoutée dans le JDK appelé jlink pour produire un runtime Java personnalisé spécifiquement conçu pour répondre aux besoins des applications, à déployer en tant qu’exécution incorporée intégrée avec le code d’application 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é sur des millions de joueurs Minecraft avec un runtime Java personnalisé incorporé dans le jeu. Derrière services en ligne comme LinkedIn, Yammer, Bing et Azure, Microsoft déploie également des centaines de milliers de JVMs à l’aide de cette technique.

Créer un runtime Java personnalisé

Pour créer un runtime Java, vous devez avoir JDK 9 ou version ultérieure installée sur votre environnement. Téléchargez et installez d’abord la 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 jdeps JDK peut être utilisé pour analyser un .class fichier, un répertoire ou un JAR fichier 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 java.lang packages et java.io qu’elle a donc uniquement besoin du module java.base. Une sortie similaire serait produite pour un JAR fichier en tant qu’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 connaître les modules souhaités. Permet jdeps de les identifier. Pour plus d’informations sur l’outil en jlink ligne de commande, consultez 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é à l’adresse suivante /javaruntime pour exécuter le code de l’application en fonction java.base du module. La structure du dossier produit par jlink est similaire à la structure du répertoire JDK, et l’outil java en ligne de javaruntime commande pour démarrer la machine virtuelle JVM se trouve dans le ./bin/ dossier comme d’habitude. É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 Docker multi-phases pour créer, consommer et packer le runtime Java personnalisé dans le cadre de votre build d’image. Découvrez 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 La sécurité et le 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 microsoft Build of OpenJDK. Visitez notre page de discussions OpenJDK sur GitHub pour nous envoyer vos commentaires.

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