Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

samedi 21 décembre 2019

Gérer plusieurs versions de Java avec jEnv

Depuis la sortie de la version 9 de Java en 2017 et la nouvelle cadence de sortie des versions de Java décidée par Oracle, il devient de plus en plus difficile de ne travailler que sur une version de Java à la fois.

Se pose alors pour le développeur la question de comment passer d'une version à l'autre de Java, et si possible de façon simple.

Sur Debian, on a longtemps utilisé la commande update-java-alternatives mais elle présente plusieurs inconvénients:

  • L'utilisation d'une version de Java est globale à tout le système (liens symboliques dans /etc/alternatives)
  • Elle ne fonctionne qu'avec les JDK installés depuis les dépôts du système (utilisation des fichiers de métadonnées .jinfo)
  • Elle est spécifique à Debian (A vérifier mais il me semble que oui)

Heureusement, le projet jEnv vient à notre secours, et permet de passer très facilement d'un JDK à un autre.

1. Installation de jEnv

Pour installer jEnv, rien de plus simple:

On clone le repository Git:

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

Puis on ajoute quelques lignes à la fin de notre fichier ~/.bash_profile ou ~/.bashrc

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Personnellement, j'ai déplacé ces lignes dans un fichier ~/.jenvrc pour les référencer ensuite dans ~/.bashrc:

if [ -f ~/.jenvrc ]; then
    . ~/.jenvrc
fi

mais ce n'est pas une obligation.

2. Configuration de jEnv

Une fois jEnv installé, on va lui indiquer quelles sont les versions de Java que l'on veux utiliser.

Au départ, aucune version de Java n'est connue de jEnv:

jenv versions

Si on ajoute un Java 9:

jenv add $HOME/jdk/jdk9/jdk-9.0.4/
openjdk64-9.0.4 added
9.0.4 added
9.0 added
9 added

Puis un Java 11:

jenv add $HOME/jdk/jdk11/jdk-11.0.2/
openjdk64-11.0.2 added
11.0.2 added
11.0 added
11 added

Les versions disponibles sont maintenant:

jenv versions
  11
  11.0
  11.0.2
  9
  9.0
  9.0.4
  openjdk64-11.0.2
  openjdk64-9.0.4

On voit que Jenv crée plusieurs tags vers le JDK ajouté.

3. Utilisation de jEnv

On a donc installé deux versions de Java, mais aucune n'est encore disponible.

Si on fait:

which java
/home/user/.jenv/shims/java

On voit que jEnv a "wrappé" la commande Java dans un script Shell.

3.1. Une version de Java globale

Définissons maintenant le Java 9 comme Java global au système:

jenv global 9

La commande précédente donne maintenant:

java -version
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+11)
OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)

Et tout nouveau terminal utilisera donc Java 9.

3.2. Une version de Java locale

Si maintenant, pour un projet particulier, j'ai besoin de Java 11, je peux le définir comme la version de Java à utiliser dans un répertoire particulier:

mkdir my-project
cd my-project
jenv local 11

Et le résultat est:

java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

Si je relance la commande pour connaître les versions disponibles:

jenv versions
* 11 (set by /home/user/my-project/.java-version)
  11.0
  11.0.2
  9
  9.0
  9.0.4
  openjdk64-11.0.2
  openjdk64-9.0.4

Et si je quitte ce projet, je reviens en Java 9:

cd
java -version
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+11)
OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)

Et j'ai donc:

jenv version
9 (set by /home/user/.jenv/version)

qui est la version globale:

jenv global
9

3.3. Une version de Java locale au Shell courant

On peut également changer la version de Java utilisée localement au Shell courant comme suit:

jenv shell 11

Par exemple, pour tester rapidement quelques lignes de Java grâce à au JShell de Java 9:

jenv shell 9 && jshell
|  Welcome to JShell -- Version 9.0.4
|  For an introduction type: /help intro

Comme on vient de le voir, jEnv est un outil très simple à utiliser pour passer d'une version de Java à une autre, et il ne dépend pas de la façon dont ont été installés les JDK pour être utilisé.

jEnv fait donc partie des outils que le développeur Java va adopter rapidement !

dimanche 9 septembre 2018

Tester une API REST directement depuis le Swagger Hub

Les moyens de tester une API REST ne manquent pas.

Mais pendant que l'on définit celle-ci, si on le fait avec le Swagger Hub, il n'est vraiment pas besoin de se compliquer la vie.

En effet, le Swagger Hub qui permet de définir le fichier yaml ou json de l'API, mais aussi de générer les stubs clients et/ou serveur de l'API permet aussi de tester une installation de ladite API.

Il suffit pour cela de:

  1. Se rendre sur la page de votre API, par exemple: https://app.swaggerhub.com/apis/<user>/<api>/<api-version>
  2. Renseigner le nom du serveur de test qui "hoste" votre API
  3. Installer l'Add-On pour Firefox CORS Everywhere afin que le Swagger Hub puisse contacter votre serveur de test
  4. Sélectionner en bas à droite de l'écran l'option: "Routing requests via browser"
  5. Cliquer sur l'URL voulue puis sur "Try it out"
  6. Remplir les champs et enfin cliquer sur "Execute"

De cette façon, vous pouvez faire très facilement des tests manuels sur la permière version de votre API et éventuellement de corriger les problèmes. Et vous n'avez écrit ni généré aucun code pour ce faire !