OpenJDK-21.0.2

Introduction à OpenJDK

OpenJDK est une implémentation libre de la plateforme d'édition standard Java d'Oracle. OpenJDK est utile pour développer des programmes Java, et fournir un environnement d'exécution complet pour lancer des programmes Java.

This package is known to build and work properly using an LFS 12.1 platform.

OpenJDK est sous GPL, avec une exception spéciale pour les projets non-libres d'utiliser ces classes dans leurs produits propriétaires. De façon similaire à la LGPL, qui autorise des programmes non-libre à lier des bibliothèques fournit par des programmes libres, la GNU General Public License, version 2, avec l'exception des chemins de classe autorise des programmes tiers à utiliser des classes fournies par des programmes libres sans l'obligation que le programme tiers soit également libre. Comme avec la LGPL, toutes les modifications faites dans des parties d'un programme libre d'une application tierce, doit également être librement disponible.

[Note]

Note

Les sources de OpenJDK incluent une suite de tests très complète et open source qui utilise l'outil de tests JTreg. Les instructions de tests suivantes permettent de tester le JDK tout juste construit pour une compatibilité raisonnable avec le JDK non-libre d'Oracle. Cependant, pour qu'une implémentation indépendante revendique la compatibilité, elle doit passer une suite de tests non-libre JCK/TCK. Aucune revendication de compatibilité, même une compatibilité partielle, peut être faite sans passer une suite de tests approuvée.

Oracle fournit un accès libre communautaire, au cas par cas, à des outils fermés pour assurer une compatibilité à 100 % avec leur JDK propriétaire. Cependant la version binaire fournie sur la page Java-21.0.2 comme la JVM construit avec les instructions suivantes n'ont pas été testées avec TCK. Aucune version qui serait construite en utilisant les instructions données, ne pourra revendiquer d'être compatible avec le JDK propriétaire, sans que l'utilisateur demande, et réussisse les tests de compatibilités.

Avec cela en tête, les binaires produits en utilisant cette méthode de construction sont régulièrement testé avec le TCK par les membres listés sur le site au-dessus. En plus de la licence communautaire, une licence pour l'éducation, non-commerciale pour TCK peut être obtenue ici.

Informations sur le paquet

  • Téléchargement (HTTP) : https://github.com/openjdk/jdk21u/archive/jdk-21.0.2-ga.tar.gz

  • Somme de contrôle MD5 : 6b714196cac31ebf31a0fc1a910ccb87

  • Taille du téléchargement : 107 Mo

  • Estimation de l'espace disque requis : 3,7 Go (plus 557 Mo pour les tests)

  • Estimation du temps de construction : 5,2 SBU avec 4 tâches (plus 32 SBU pour les tests avec 4 tâches)

Téléchargements supplémentaires

Tests facultatifs

Dépendances de OpenJDK

Dépendances de Required

Un binaire existant (Java-21.0.2 ou une version construite récente de ce paquet. Les instructions qui suivent considèrent que vous utilisez Configuration de l'environnement Java) alsa-lib-1.2.11, cpio-2.15, Cups-2.4.7, UnZip-6.0, Which-2.21, Bibliothèques Xorg et Zip-3.0

Recommandées

Facultatives

git-2.44.0, Graphviz-10.0.1, Mercurial-6.6.3, ccache, pandoc et pigz

Installation de OpenJDK

Si vous avez téléchargé la suite de tests facultative, décompressez-la maintenant :

tar -xf ../jtreg-7.3.1+1.tar.gz
[Note]

Note

Avant de continuer, vous devez vous assurer que votre variable d'environnement PATH contient l'emplacement du compilateur Java utilisé pour bootstrapper OpenJDK. C'est le seul impératif pour l'environnement. Les installations modernes de Java n'ont pas besoin de JAVA_HOME et CLASSPATH n'est pas utilisé ici. De plus les développeurs d'OpenJDK recommandent de ne pas initialiser JAVA_HOME.

Le système de construction ne supporte pas l'option -j dans MAKEFLAGS. Voir --with-jobs= dans les explications des commandes pour plus d'informations sur la parallélisation.

Configurez et construisez le paquet avec les commandes suivantes :

unset JAVA_HOME                             &&
bash configure --enable-unlimited-crypto    \
               --disable-warnings-as-errors \
               --with-stdc++lib=dynamic     \
               --with-giflib=system         \
               --with-harfbuzz=system       \
               --with-jtreg=$PWD/jtreg      \
               --with-lcms=system           \
               --with-libjpeg=system        \
               --with-libpng=system         \
               --with-zlib=system           \
               --with-version-build="13"    \
               --with-version-pre=""        \
               --with-version-opt=""        \
               --with-cacerts-file=/etc/pki/tls/java/cacerts &&
make images

Pour tester les résultats, vous devrez exécuter le programme jtreg. Vous pouvez indiquer le nombre de tests en parallèle en ajoutant la valeur -conc:<X> à la commande suivante (sinon les tests sont lancés de manière séquentielle) :

export JT_JAVA=$(echo $PWD/build/*/jdk) &&
jtreg/bin/jtreg -jdk:$JT_JAVA -automatic -ignore:quiet -v1 \
    test/jdk:tier1 test/langtools:tier1 &&
unset JT_JAVA

Pour avoir plus de contrôle sur la suite de tests, regardez la documentation disponible dans jtreg/doc/jtreg/usage.txt. Pour vérifier les résultats, ouvrez les fichiers JTreport/test_{jdk,langtools}/text/stats.txt et JTreport/test_{jdk,langtools}/text/summary.txt. Vous devriez vous attendre à une soixantaine d'échecs et une dizaine d'erreurs.

Installez le paquet avec les commandes suivantes en tant qu'utilisateur root :

install -vdm755 /opt/jdk-21.0.2+13             &&
cp -Rv build/*/images/jdk/* /opt/jdk-21.0.2+13 &&
chown -R root:root /opt/jdk-21.0.2+13          &&
for s in 16 24 32 48; do
  install -vDm644 src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png \
                  /usr/share/icons/hicolor/${s}x${s}/apps/java.png
done
[Note]

Note

Si vous souhaitez uniquement installer l'environnement d'exécution de Java (JRE) vous pouvez utiliser build/*/images/jre dans la commande cp précédente.

Il y a maintenant deux SDK d'OpenJDK installés dans /opt. Vous pouvez décider de laquelle vous voulez utiliser par défaut. Normalement, vous devez opter pour la version OpenJDK que vous venez d'installer. Dans ce cas, exécutez la ligne suivante en tant qu'utilisateur root :

ln -v -nsf jdk-21.0.2+13 /opt/jdk

Si vous le souhaitez, vous pouvez créer des fichiers .desktop pour ajouter des entrées dans le menu pour java et jconsole. Les icônes requises ont déjà été installées. En tant qu'utilisateur root :

mkdir -pv /usr/share/applications &&

cat > /usr/share/applications/openjdk-java.desktop << "EOF" &&
[Desktop Entry]
Name=OpenJDK Java 21.0.2 Runtime
Comment=OpenJDK Java 21.0.2 Runtime
Exec=/opt/jdk/bin/java -jar
Terminal=false
Type=Application
Icon=java
MimeType=application/x-java-archive;application/java-archive;application/x-jar;
NoDisplay=true
EOF
cat > /usr/share/applications/openjdk-jconsole.desktop << "EOF"
[Desktop Entry]
Name=OpenJDK Java 21.0.2 Console
Comment=OpenJDK Java 21.0.2 Console
Keywords=java;console;monitoring
Exec=/opt/jdk/bin/jconsole
Terminal=false
Type=Application
Icon=java
Categories=Application;System;
EOF

Explication des commandes

bash configure... : Le niveau supérieur de configure est une enveloppe de celle des autotools. Il n'est pas exécutable et doit être lancé avec bash.

--enable-unlimited-crypto : À cause des limitations de l'usage de la cryptographie dans certains pays, on peut limiter la taille des clés de cryptographie et l'utilisation de certains algorithmes dans un fichier de politique. Ce paramètre permet de garder un fichier de politique sans restriction. Il est de la responsabilité de l'utilisateur de s'assurer du bon respect de la loi.

--disable-warnings-as-errors : Ce paramètre désactive l'utilisation de -Werror pendant la construction.

--with-stdc++lib=dynamic : Ce paramètre force le système de construction à se lier à libstdc++.so (dynamique) plutôt que libstdc++.a (statique).

--with-jobs=<X> : le paramètre -j passé à make ne fonctionne pas avec make quand il est invoqué ici. Par défaut, le système de construction utilisera le nombre de CPU - 1.

--with-jtreg=$PWD/jtreg : Ce paramètre dit à configure où trouver jtreg. Ne le mettez pas si vous n'avez pas téléchargé la suite de tests facultative.

--with-{giflib,harfbuzz,lcms,libjpeg,libpng,zlib}=system : Permet d'utiliser les bibliothèques du système au lieu de celles intégrées.

--with-version-build : Actuellement, le système de construction n'inclut pas le numéro de construction dans la chaîne de version. Il est spécifié ici.

--with-version-pre : Ce paramètre permet d'ajouter un préfixe personnalisé à la chaîne de version.

--with-version-opt : Ce paramètre permet d'ajouter une description facultative de la construction à la chaîne de version.

--with-cacerts-file=/etc/pki/tls/java/cacerts : Spécifie où trouver un fichier cacerts, /etc/pki/tls/java/ sur un système BLFS. Sinon, un fichier vide est créé. Vous pouvez utiliser la commande /usr/sbin/make-ca --force pour le générer, une fois que vous avez installé les binaires Java.

--with-boot-jdk : Ce paramètre fournit l'emplacement du JDK temporaire. Ce n'est normalement pas nécessaire si java est trouvé dans le PATH.

Configuration de OpenJDK

Information de configuration

Normalement, l'environnement Java a été configuré après l'installation de la version binaire, et peut être utilisé avec le paquet fraîchement construit. Regardez Configuration de l'environnement Java dans le cas où vous voudriez modifier quelque chose.

Pour tester que les pages de manuel sont correctement installées, tapez source /etc/profile et man java pour afficher les pages de manuel respectives.

Configuration du fichier de certificats d'autorités de certification pour JRE (cacerts)

Si vous avez lancé les instructions de la page make-ca-1.13, vous n'avez qu'à créer un lien symbolique à l'emplacement par défaut pour le fichier cacerts. En tant qu'utilisateur root :

ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts

Pour vérifier l'installation, lancez :

cd /opt/jdk
bin/keytool -list -cacerts

À l'invite Enter keystore password:, saisissez changeit (la valeur par défaut) ou appuyez seulement sur la touche « Entrée ». Si le fichier cacerts a été correctement installé, vous verrez une liste de certificats avec des informations relatives à chacun. Sinon, vous devez les réinstaller.

Contenu

Programmes installés: jar, jarsigner, java, javac, javadoc, javap, jcmd, jconsole, jdb, jdeprscan, jdeps, jfr, jhsdb, jimage, jinfo, jlink, jmap, jmod, jpackage, jps, jrunscript, jshell, jstack, jstat, jstatd, jwebserver, keytool, rmiregistry et serialver
Bibliothèques installées: 37 bibliothèques dans /opt/jdk-21.0.2+13/lib/
Répertoire installé: /opt/jdk-21.0.2+13

Descriptions courtes

jar

combine des fichiers différents en une seule archive jar

jarsigner

signe les fichiers jar et vérifie la signature et l'intégrité d'un fichier jar signé

java

lance une application Java en démarrant l'environnement d'exécution Java, chargeant une classe spécifiée et invoquant sa méthode main

javac

lit les définitions de classe et d'interface, écrit dans le langage de programmation Java, et les compile en des fichiers de classe en bytecode

javadoc

analyse les déclarations et les commentaires de documentation dans un ensemble de fichiers source Java et produit l'ensemble correspondant des pages HTML décrivant les classes, les interfaces, les méthodes de constructions et les champs

javap

désassemble un fichier de classe Java

jcmd

est un utilitaire pour envoyer les demandes de diagnostic à une machine virtuelle Java

jconsole

est un outil graphique de console pour surveiller et gérer les applications Java locales et distantes et les machines virtuelles

jdb

est un simple débogueur en ligne de commande pour les classes Java

jdeprscan

scanne les fichiers de classes ou jar pour trouver des utilisations d'éléments obsolètes de l'API

jdeps

montre les dépendances en termes de paquets ou de classes des fichiers de classes Java

jfr

est un outil pour travailler avec les fichiers « Flight Recorder »

jhsdb

est un outil pour analyser le contenu d'un core dump d'une machine virtuelle java (JVM) crashée

jimage

est utilisé pour lister, extraire, vérifier ou récupérer des informations sur les modules au format jimage

jinfo

affiche les informations de configuration de Java pour un processus Java donné, un fichier core, ou un serveur de débogage distant

jlink

est utilisé pour assembler et optimiser un ensemble de modules et leurs dépendances dans une image d'exécution personnalisée

jmap

affiche les cartes mémoires des objets partagés ou les détails mémoire d'un processus donné, d'un fichier core, ou d'un serveur de débogage distant

jmod

crée des fichiers JMOD et liste le contenu de fichiers JMOD existants

jpackage

génère des paquets et des images d'applications Java

jps

liste les JVM instrumentées sur le système cible

jrunscript

est un script shell en ligne de commandes

jshell

est un outil interactif pour apprendre le langage de programmation Java et prototyper du code Java

jstack

affiche la pile des traces JAVA, des treads Java pour un processus Java donné, un fichier core, ou un serveur de débogage distant

jstat

affiche les statistiques de performance pour une JVM instrumentée

jstatd

est une application serveur RMI qui surveille la création et l'arrêt des JVM instrumentés

jwebserver

fournit un serveur HTTP minimaliste, conçu pour être utilisé pour le prototypage, le test et le débogage

keytool

est un utilitaire de gestion des clés et certificats

rmiregistry

crée et démarre un registre d'objet distant sur le port spécifié de l'hôte actuel

serialver

retourne le serialVersionUID pour une ou plusieurs classes sous une forme appropriée pour la copie dans une classe évolutive