Installer et utiliser Java sur Debian ou Ubuntu

On va voir dans ce billet comment installer Java puis Maven et/ou Gradle sur Debian ou Ubuntu, et aussi comment passer facilement d’une version de Java à une autre.

Par le passé, Java était fourni par Sun et n’était pas disponible dans les dépôts des systèmes Linux. Maintenant que l’OpenJDK a acquis ses lettres de noblesse, on peut installer Java facilement avec une commande apt-get et ce sans recourir au passage par le site d’Oracle – à condition bien sûr que les build GPL d’Oracle du JDK nous conviennent.

1. Installer Java

Pour installer l’OpenJDK en version 11 sur Debian ou Ubuntu, il vous suffit de faire:

$ sudo apt-get install openjdk-11-jdk

Sur des versions récentes de Debian (bullseye) ou Ubuntu (20.04) vous aurez aussi la possibilité d’installer le JDK en version 13, voire plus récent. On peut même encore trouver la version 8 dans certaines distributions mais pas pour longtemps …

Si vous n’avez besoin que du JRE, vous pouvez l’installer comme suit:

$ sudo apt-get install openjdk-13-jre

Et si vous n’avez pas besoin d’interface graphique, la version headless vous suffira:

$ sudo apt-get install openjdk-11-jdk-headless

2. Passer d’une version de Java à une autre

Une fois le ou les JDK installés, on peut les lister avec:

$ sudo update-java-alternatives --list
java-1.11.0-openjdk-amd64      1111       /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.13.0-openjdk-amd64      1311       /usr/lib/jvm/java-1.13.0-openjdk-amd64

Pour définir la version 11 comme version à utiliser:

$ sudo update-java-alternatives --set java-1.11.0-openjdk-amd64

Ensuite, on a bien:

$ java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

A noter que la commande update-java-alternatives supporte la complétion Bash, ce qui est appréciable quand on passe d’un JDK à l’autre.

Si vous ne disposez pas de cette commande, il faudra installer le paquet java-common:

$ sudo apt-get install java-common

On vient de voir que pour installer un JDK et passer d’une version de Java à une autre, nous n’avons eu besoin d’aucun autre paquet tiers ou utilitaire provenant de GitHub car tout est disponible dans les dépôts du système Debian.

2.1. Avec AdoptOpenJDK

La façon de passer d’un JDK à un autre avec update-java-alternatives que je viens de décrire fonctionne aussi si on installe les JDK d’AdoptOpenJDK en ajoutant le dépôt Debian de ce dernier.

3. Installer Maven

Pour installer Maven, on va de nouveau utiliser le dépôt standard du système.

En effet, Maven n’évoluant plus beaucoup, Debian Bullseye et Ubuntu 20.04 qui est basée sur cette dernière proposent Maven dans sa dernière version:

$ apt-get update && apt-cache show maven
...
Get:4 http://deb.debian.org/debian bullseye/main amd64 Packages [7958 kB]
Fetched 8165 kB in 2s (4028 kB/s)    
Reading package lists... Done
Package: maven
Version: 3.6.3-1
...

3.1. Installer la complétion Bash pour Maven

Le paquet Maven de Debian n’inclue pas la complétion Bash 🙁

C’est un peu dommage étant donné les nombreux flags et cibles possibles de la commande mvn.

Heureusement, quelqu’un s’est chargé d’écrire un script Bash pour cela. Il semble même que plusieurs personnes se soient essayées à l’exercice mais le dépôt suivant semble le plus pertinent et est cité sur le site de Maven:

https://github.com/juven/maven-bash-completion

Pour installer la complétion Bash pour Maven:

$ sudo wget https://raw.github.com/juven/maven-bash-completion/master/bash_completion.bash --output-document /etc/bash_completion.d/mvn

Il existe aussi un autre dépôt basé sur le premier et que je n’ai pas testé: https://github.com/rakus/extensible-maven-completion

4. Installer Gradle

Contrairement à Maven, la version de Gradle des dépôts Debian et Ubuntu est trop ancienne:

$ sudo apt-cache show gradle
Package: gradle
Architecture: all
Version: 4.4.1-10
...

On pourrait installer Gradle « à la main » en téléchargeant l’archive de sa dernière version, puis en décompressant l’archive et finalement en créant un lien vers le binaire de Gradle.

On va plutôt ici l’installer avec liar, qui fera pour nous ces différentes étapes, et nous fera gagner du temps:

$ liar -l install gradle https://downloads.gradle.org/distributions/gradle-6.7.1-bin.zip

Pour peu que le répertoire ~/bin existe et qu’il soit dans le PATH du système, la commande gradle sera alors automatiquement disponible ensuite et ce sans rien changer aux fichiers .bashrc ou .profile !

4.1. Installer la complétion Bash pour Gradle

Gradle disposant d’un paquet fournissant la complétion Bash, il suffit pour l’installer de:

$ sudo apt-get install gradle-completion

Après quoi:

$ gradle<TAB>
buildEnvironment     - Displays all buildscript dependencies declared in root project.
components           - Displays the components produced by root project.
dependencies         - Displays all dependencies declared in root project.
dependencyInsight    - Displays the insight into a specific dependency in root project.
dependentComponents  - Displays the dependent components of components in root project.
help                 - Displays a help message.
init                 - Initializes a new Gradle build.
model                - Displays the configuration model of root project.
projects             - Displays the sub-projects of root project.
properties           - Displays the properties of root project.
tasks                - Displays the tasks runnable from root project.
wrapper              - Generates Gradle wrapper files.

5. Conclusion

On a vu comment installer Java, Maven et Gradle sur Debian et Ubuntu en s’appuyant le plus possible sur les paquets fournis par le système.

On verra dans un prochain billet comment:

  • gérer les installations de GraalVM
  • passer d’une version de Java à une autre avec jenv