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.
Création d’un runtime Java avec jlink
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.