Spécificités Java dans Fedora pour les utilisateurs et les développeurs

This section contains information about default Java implementation in Fedora, switching between different Java runtime environments and about few useful tools which can be used during packaging / development.

Implémentation de Java dans Fedora

Fedora ships with an open-source reference implementation of Java Standard Edition called OpenJDK. OpenJDK provides Java Runtime Environment for Java applications and set of development tools for Java developers.

From users point of view, java command is probably the most interesting. It is a Java application launcher which spawns Java Virtual Machine (JVM), loads specified .class file and executes its main method.

Voici un exemple de comment lancer un échantillon de projet Java depuis cette section [_example_java_project]:

$ java org/fedoraproject/helloworld/HelloWorld.class

OpenJDK fournis beaucoup d’outils intéressants pour les développeurs Java:

  • javac est un compilateur Java qui traduis les fichiers source en bytecode Java, qui peut être ensuite interprété par JVM.

  • jdb est un simple debugger en ligne de commande pour les applications Java.

  • javadoc est un outil pour générer une documentation Javadoc.

  • javap peut etre utilisé pour désassembler des fichiers de classes Java.

Basculement entre différentes implémentations Java

Les utilisateurs et les développeurs peuvent vouloir avoir plusieurs environnements Java installés en même temps. C’est possible dans Fedora, mais uniquement un seul peut être l’environnement Java par défaut dans le système. Fedora utilise alternative pour basculer entre les différentes JREs/JDKs installées.

# alternatives --config java

Voici 3 programmes qui proviennent de 'java'.

  Selection    Command
  -----------------------------------------------
   1           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-1.fc35.x86_64/bin/java)
*+ 2           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.14.1.1-5.fc35.x86_64/bin/java)
   3           java-latest-openjdk.x86_64 (/usr/lib/jvm/java-18-openjdk-18.0.1.0.10-1.rolling.fc35.x86_64/bin/java)

Entrer pour garder la sélection actuelle [+], ou taper le nombre sélectionné :

L’Exemple en dessous montre comment choisir l’environnement Java par défaut. La commande java pointera alors vers l’implémentation Java fournie par le JRE spécifié.

Tapez man alternatives pour plus d’information sur comment utiliser alternatives.

Les développeurs peuvent vouloir utiliser un compilateur Java d’un JDK différent. Ceci peut être fait avec alternatives --config javac.

Construction du chemin de classes avec build-classpath

La plupart des application requière de spécifier le chemin de class dans l’ordre pour fonctionner correctement. Fedora contiens plusieurs outils qui permettent de travailler plus facilement avec les chemins de classes.

build-classpath -cet outil prend les nom de fichiers ou les coordonnées de l’artefact comme argument et les traduits en chaîne de type classpath. Voir l’exemple suivant :

$ build-classpath log4j junit org.ow2.asm:asm
/usr/share/java/log4j.jar:/usr/share/java/junit.jar:/usr/share/java/objectweb-asm4/asm.jar

log4j correspond à log4j.jar stocké dans %{_javadir}. Si le fichier JAR est stocké dans le sous-répertoire derrière %{_javadir}, Il est nécessaire de passer sous-répertoire/nom_du_jar en argument à build-classpath. Exemple:

$ build-classpath httpcomponents/httpclient.jar
/usr/share/java/httpcomponents/httpclient.jar

Construction d’un dépôt JAR avec build-jar-repository

Un autre outil est build-jar-repository. Il peut remplir le répertoire spécifié avec des liens symboliques ou physiques vers les fichiers JAR indiqués. Tout comme build-classpath, les fichiers JAR peuvent être identifier par leurs nom ou les coordonnées de l’artefact.

$ build-jar-repository my-repo log4j httpcomponents/httpclient junit:junit
$ ls -l my-repo/
total 0
lrwxrwxrwx. 1 msrb msrb 45 Oct 29 10:39 [httpcomponents][httpclient].jar -> /usr/share/java/httpcomponents/httpclient.jar
lrwxrwxrwx. 1 msrb msrb 25 Oct 29 10:39 [junit:junit].jar -> /usr/share/java/junit.jar
lrwxrwxrwx. 1 msrb msrb 25 Oct 29 10:39 [log4j].jar -> /usr/share/java/log4j.jar

Une commande similaire est rebuild-jar-repository, elle peut être utilisée pour reconstruire les dépôts JAR précédemment construits avec `build-jar-repository. Tapez `man rebuild-jar-repository`pour plus d’informations.

`build-classpath-directory`est un petit outil qui peut être utilisé pour construire une chaîne de chemin de classe depuis un répertoire spécifié.

$ build-classpath-directory /usr/share/java/xstream
/usr/share/java/xstream/xstream-benchmark.jar:/usr/share/java/xstream/xstream.jar
:/usr/share/java/xstream/xstream-hibernate.jar