Installation de Java sur Ubuntu

Installation de Java sur Ubuntu

1. Vue d'ensemble

Dans ce tutoriel, nous allons présenterdifferent methods for installing a JDK on Ubuntu. Ensuite, nous comparerons brièvement les méthodes. Enfin, nous montrerons comment gérer plusieurs installations Java sur un système Ubuntu.

Avant chaque méthode, nous avons besoin de

  • un système Ubuntu

  • être connecté en tant qu'utilisateur non root avec les privilègessudo

Les instructions décrites ci-dessous ont été testées sur Ubuntu 18.10, 18.04 LTS, 16.04 LTS et 14.04 LTS. Pour Ubuntu 14.04 LTS, il existe quelques différences, qui sont mentionnées dans le texte.

Veuillez noter que les packages que vous pouvez télécharger à partir d'OpenJDK et d'Oracle et les packages disponibles dans les référentiels sont mis à jour régulièrement. Les noms exacts des paquets changeront probablement dans quelques mois, mais les méthodes d'installation de base resteront les mêmes.

2. Installation du JDK 11

Si nous voulons utiliser la version la plus récente et la plus performante de JDK, l’installation manuelle est souvent la solution. Cela signifie télécharger un package à partir d'OpenJDK ou du site Oracle et le configurer de manière à ce qu'il respecte les conventions de configuration des packages JDK parapt.

2.1. Installation manuelle d'OpenJDK 11

Tout d'abord, nous allons télécharger l'archivetar de l'OpenJDK 11 récemment publié:

$ wget https://download.java.net/java/ga/jdk11/openjdk-11_linux-x64_bin.tar.gz

Et nous comparons la sommesha256 du package téléchargé avecthe one provided on the OpenJDK site:

$ sha256sum openjdk-11_linux-x64_bin.tar.gz

Extrayons l'archivetar:

$ tar xzvf openjdk-11_linux-x64_bin.tar.gz

Ensuite, déplaçons le répertoirejdk-11 que nous venons d’extraire dans un sous-répertoire de/usr/lib/jvm. Les packagesapt décrits dans la section suivante placent également leurs JDK dans ce répertoire:

$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-11 /usr/lib/jvm/openjdk-11-manual-installation/

Maintenant, nous voulonsmake the java and javac commands available. Une possibilité serait de créer des liens symboliques pour eux, par exemple dans le répertoire/usr/bin. Mais à la place, nous installerons une alternative pour les deux. De cette façon, si nous souhaitons installer des versions supplémentaires de JDK, ils joueront bien ensemble:

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-11-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-11-manual-installation/bin/javac 1

Vérifions l'installation:

$ java -version

Comme nous pouvons le voir dans le résultat, nous avons en effet installé la dernière version d'OpenJDK JRE et JVM:

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Jetons également un œil à la version du compilateur:

$ javac -version
javac 11

2.2. Installation manuelle d'Oracle JDK 11

Si nous voulons être sûrs d'utiliser la dernière version d'Oracle JDK, nous pouvons suivre un flux de travaux d'installation manuelle similaire à celui d'OpenJDK. Afin de télécharger l'archivetar pour JDK 11 à partir desOracle website,we must accept a license agreement first. Pour cette raison, le téléchargement viawget est un peu plus compliqué que pour OpenJDK:

$ wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/11.0.1+13/90cf5d8f270a4347a95050320eef3fb7/jdk-11.0.1_linux-x64_bin.tar.gz

L'exemple ci-dessus télécharge le package pour 11.0.1. Le lien de téléchargement exact change pour chaque version mineure.

Les étapes suivantes sont les mêmes que pour OpenJDK:

$ sha256sum jdk-11.0.1_linux-x64_bin.tar.gz
$ tar xzvf jdk-11.0.1_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-11.0.1 /usr/lib/jvm/oracle-jdk-11-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-11-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-11-manual-installation/bin/javac 1

La vérification est également la même. Mais le résultat montre que cette fois, nous n’avons pas installé OpenJDK mais Java ™:

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

Et pour le compilateur:

$ javac -version
javac 11.0.1

2.3. Installation d'Oracle JDK 11 à partir d'un PPA

Actuellement, Oracle JDK 11 est également disponible dans un PPA (archive de paquetage personnel). Cette installation comprend 2 étapes: l'ajout du référentiel à notre système et l'installation du paquet depuis le référentiel viaapt:

$ sudo add-apt-repository ppa:linuxuprising/java
$ sudo apt update
$ sudo apt install oracle-java11-installer

Les étapes de vérification doivent afficher le même résultat qu'après l'installation manuelle dans la section 2.2.1:

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

Et pour le compilateur:

$ javac -version
javac 11.0.1

Sur Ubuntu 14.04 LTS, la commandeadd-apt-repository n’est pas disponible par défaut. Pour ajouter un référentiel, nous devons d'abord installer le packagesoftware-properties-common.

$ sudo apt update
$ sudo apt install software-properties-common

Ensuite, nous pouvons continuer avecadd-apt-repository, apt update andapt install comme indiqué ci-dessus.

3. Installation du JDK 8

3.1. Installation d'OpenJDK 8 sur Ubuntu 16.04 LTS et plus récent

JDK 8 est une version LTS qui existe depuis un certain temps. Pour cette raison, nous pouvons trouver une version à jour d'OpenJDK 8 dans le référentiel «principal» sur la plupart des versions prises en charge par Ubuntu. Bien sûr, nous pouvons également accéder au site Web d'OpenJDK, y récupérer un package et l'installer de la même manière que nous l'avons vu dans la section précédente.

Mais l'utilisation des outilsapt et du référentiel «principal» offre certains avantages. Le référentiel «principal» est disponible par défaut sur tous les systèmes Ubuntu. Il est soutenu par Canonical - la même société qui gère Ubuntu elle-même.

Installons OpenJDK 8 à partir du référentiel «principal» avecapt:

$ sudo apt update
$ sudo apt install openjdk-8-jdk

Maintenant, vérifions l'installation:

$ java -version

Le résultat devrait répertorier un environnement d'exécution et une machine virtuelle:

openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.18.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Vérifions que l'exécutablejavac est également disponible:

$ javac -version

Nous devrions maintenant voir le même numéro de version que celui indiqué ci-dessus:

javac 1.8.0_181

3.2. Installation d'OpenJDK 8 sur Ubuntu 14.04 LTS

Sur Ubuntu 14.04 LTS, les packages OpenJDK ne sont pas disponibles dans le référentiel "Main", nous allons donc les installer à partir du PPA deopenjdk-r. Comme nous l'avons vu dans la section 2.3 ci-dessus, la commandeadd-apt-repository n'est pas disponible par défaut. Nous avons besoin du packagesoftware-properties-common pour cela:

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt update
$ sudo apt install openjdk-8-jdk

3.3. Installation d'Oracle JDK 8 à partir d'un PPA

Le référentiel «principal» ne contient aucun logiciel propriétaire. If we want to install Oracle Java with apt, we’ll have to use a package from a PPA. Nous avons déjà vu comment installer Oracle JDK 11 à partir du PPA delinuxuprising. Pour Java 8, nous pouvons trouver les packages dans le PPAwebupd8team.

Tout d'abord, nous devons ajouter le référentiel PPAapt à notre système:

$ sudo add-apt-repository ppa:webupd8team/java

Ensuite, nous pouvons installer le paquet de la manière habituelle:

$ sudo apt update
$ sudo apt install oracle-java8-installer

Lors de l'installation, nous devons accepter le contrat de licence d'Oracle. Vérifions l'installation:

$ java -version

La sortie affiche un JRE et une JVM Java ™:

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

Nous pouvons également vérifier que le compilateur a été installé:

$ javac -version
javac 1.8.0_181

4. Installation de JDK 10

Les versions Java 10 et Java 9 ne sont plus prises en charge. Vous pouvez les installer manuellement en suivant les étapes décrites à la section 2. Vous pouvez récupérer les paquets de:

Les deux sites contiennent le même avertissement:

Ces anciennes versions du JDK sont fournies pour aider les développeurs à résoudre les problèmes des systèmes plus anciens. They are not updated with the latest security patches and are not recommended for use in production.

4.1.  Installation manuelle d'OpenJDK 10

Voyons comment installer OpenJDK 10.0.1:

$ wget https://download.java.net/java/GA/jdk10/10.0.1/fb4372174a714e6b8c52526dc134031e/10/openjdk-10.0.1_linux-x64_bin.tar.gz
$ sha256sum openjdk-10.0.1_linux-x64_bin.tar.gz
$ tar xzvf openjdk-10.0.1_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-10.0.1 /usr/lib/jvm/openjdk-10-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-10-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-10-manual-installation/bin/javac 1
$ java -version
$ javac -version

4.2. Installation manuelle d'Oracle JDK 10

Comme nous l'avons vu dans la section 2.2., Pour télécharger un package à partir du site Web d'Oracle,we must accept a license agreement first. Contrairement aux versions prises en charge, nous ne pouvons pas télécharger les anciens JDK Oracle viawget et un cookie. Nous devons nous diriger vershttps://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase10-4425482.html et télécharger le fichiertar.gz. Ensuite, nous suivons les étapes habituelles:

$ sha256sum jdk-10.0.2_linux-x64_bin.tar.gz
$ tar xzvf jdk-10.0.2_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-10.0.2 /usr/lib/jvm/oracle-jdk-10-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-10-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-10-manual-installation/bin/javac 1
$ java -version
$ javac -version

5. Installation de JDK 9

5.1. Installation manuelle d'OpenJDK 9

Tout comme nous l'avons vu ci-dessus avec OpenJDK 10.0.1, nous téléchargeons le package OpenJDK 9 viawget et le configurons selon les conventions:

$ wget https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_linux-x64_bin.tar.gz
$ sha256sum openjdk-9.0.4_linux-x64_bin.tar.gz
$ tar xzvf openjdk-9.0.4_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-9.0.4 /usr/lib/jvm/openjdk-9-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk-9-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/openjdk-9-manual-installation/bin/javac 1
$ java -version
$ javac -version

5.2. Installation manuelle d'Oracle JDK 9

Une fois encore, nous utilisons la même méthode que pour JDK 10. Nous devons nous diriger vershttps://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase9-3934878.html et télécharger le fichiertar.gz. Ensuite, nous suivons les étapes habituelles:

$ sha256sum jdk-9.0.4_linux-x64_bin.tar.gz
$ tar xzvf jdk-9.0.4_linux-x64_bin.tar.gz
$ sudo mkdir /usr/lib/jvm
$ sudo mv jdk-9.0.4 /usr/lib/jvm/oracle-jdk-9-manual-installation/
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle-jdk-9-manual-installation/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle-jdk-9-manual-installation/bin/javac 1
$ java -version
$ javac -version

6. Comparaison

Nous avons vu trois manières différentes d'installer un JDK sur Ubuntu. Examinons rapidement chacun d’entre eux, en soulignant les avantages et les inconvénients.

6.1. Référentiel «principal»

Ce sont les“Ubuntu native” way of installation. Un gros avantage est que nous mettons à jour les packages via le «workflow habituel deapt» avecapt update etapt upgrade.

De plus, le référentiel «principal» est maintenu par Canonical, quiprovides reasonably fast (if not immediate) updates. Par exemple, les versions OpenJDK 10.0.1 et 10.0.2 ont été synchronisées dans le mois qui a suivi la publication.

6.2. PPA

Les PPA sont de petits référentielsmaintained by an individual developer or a group. Cela signifie également que la fréquence de mise à jour dépend du responsable.

Les packages des PPA sont considérés comme desriskier than the packages in the “Main” repository. Premièrement, nous devons ajouter explicitement le PPA à la liste des référentiels du système, indiquant que nous lui faisons confiance. Ensuite, nous pouvons gérer les packages via les outils habituels deapt (apt update etapt upgrade).

6.3. Installation manuelle

Nous téléchargeons le package directement à partir du site OpenJDK ou Oracle. Although this method offers a great deal of flexibility, updates are our responsibility. Si nous voulons avoir le JDK le plus récent et le plus performant, c'est la voie à suivre.

7. Exploration d'autres versions de JDK

Les exemples des sections 2 et 3 reflètent l’état actuel sur Ubuntu 18.04 LTS. N'oubliez pas que les JDK et les packages correspondants sont mis à jour régulièrement. Il est donc utile de savoir commentexplore our current possibilities.

Dans cette section, nous allons nous concentrer sur l'analyse des packages OpenJDK dans le référentiel «principal». Si nous avons déjà ajouté un PPA avecadd-apt-repository, nous pouvons l'explorer de la même manière avecapt list etapt show.

Pour découvrir quels PPA sont disponibles, nous pouvons nous diriger vershttps://launchpad.net/. Si nous ne trouvons pas ce que nous recherchons dans le référentiel "principal" et dans les PPA, nous devrons revenir à l'installation manuelle.

Si nous souhaitons utiliser une version non prise en charge, même cela peut être difficile. Au moment d'écrire ces lignes, nous n'avons trouvé aucun package pour Java 9 ou Java 10 sur les sites Web OpenJDK et Oracle.

Voyons quels autres packages JDK existent dans le référentiel "principal":

$ apt list openjdk*jdk

Sur Ubuntu 18.04 LTS, nous pouvons choisir entre les deux versions Java actuelles de LTS:

Listing... Done
openjdk-11-jdk/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-8-jdk/bionic-updates,bionic-security 8u181-b13-0ubuntu0.18.04.1 amd64

Il est également intéressant de noter que bien que le paquet s'appelleopenjdk-11-jdk, au moment de la rédaction de cet article, il installe en fait la version 10.0.2. Ceci est susceptible de changer bientôt. Nous pouvons voir que si nous inspectons le colis:

$ apt show openjdk-11-jdk

Jetons un coup d'œil à la section "Dépend" du résultat. Notez que ces packages (par exemple un JRE) sont également installés à côté deopenjdk-11-jdk:

Depends: openjdk-11-jre (= 10.0.2+13-1ubuntu0.18.04.2),
openjdk-11-jdk-headless (= 10.0.2+13-1ubuntu0.18.04.2),
libc6 (>= 2.2.5)

Voyons quels autres packages nous avons à notre disposition en plus du package jdk par défaut:

$ apt list openjdk-11*
Listing... Done
openjdk-11-dbg/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-demo/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-doc/bionic-updates,bionic-updates,bionic-security,bionic-security 10.0.2+13-1ubuntu0.18.04.2 all
openjdk-11-jdk/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-jdk-headless/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-jre/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-11-jre-headless/bionic-updates,bionic-security,now 10.0.2+13-1ubuntu0.18.04.2 amd64 [installed,automatic]
openjdk-11-jre-zero/bionic-updates,bionic-security 10.0.2+13-1ubuntu0.18.04.2 amd64
openjdk-11-source/bionic-updates,bionic-updates,bionic-security,bionic-security 10.0.2+13-1ubuntu0.18.04.2 all

Certains de ces paquets peuvent être utiles. Par exemple,openjdk-11-source contient des fichiers source pour les classes de l'API Java core, tandis queopenjdk-11-dbg contient les symboles de débogage.

Outre la familleopenjdk-*, il y a le packagedefault-jdk, qui vaut la peine d'être exploré:

$ apt show default-jdk

A la fin de la sortie, la description dit:

«Ce paquet de dépendance pointe sur le runtime Java ou sur le kit de développement compatible Java recommandé pour cette architecture…»

Dans le cas d'Ubuntu 18.04 LTS, il s'agit du packageopenjdk-11-jdk pour le moment.

8. Présentation: versions et packages Java

Voyons maintenant comment différentes versions de Java pourraient être installées sur Ubuntu 18.04 LTS au moment d'écrire ces lignes:

Version OpenJDK Oracle Java

11

installation manuelle

installation manuelleoracle-java11-installer dans le PPAlinuxuprising

10

installation manuelle - non prise en charge

installation manuelle - non prise en charge

9

installation manuelle - non prise en charge

installation manuelle - non prise en charge

8

openjdk-8-jdk dans le référentiel «principal»

oracle-java8-installer dans le PPAwebupd8team

9. Plusieurs versions Java sur un système Ubuntu

Le moyen standard pour gérer plusieurs versions du même logiciel sous Ubuntu est via le système Debian Alternatives. La plupart du temps, nous créons, maintenons et affichons des alternatives via le programmeupdate-alternatives.

When apt installs a JDK package, it automatically adds the entries for the alternatives. Dans le cas d’une installation manuelle, nous avons vu comment ajouter les alternatives pourjava etjavac respectivement.

Jetons un coup d'œil à nos alternatives:

$ update-alternatives --display java

Sur notre système de test, où nous avons installé deux versions différentes d'OpenJDK, la sortie répertorie les deux alternatives avec leurs priorités respectives:

java - auto mode
link best version is /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-11-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1101
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - priority 1081
slave java.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/jre/man/man1/java.1.gz

Maintenant que nous avons vu nos alternatives,we can also switch between them:

$ sudo update-alternatives --config java

De plus, nous obtenons une sortie interactive, où nous pouvons basculer entre les alternatives via le clavier:

There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode

Press  to keep the current choice[*], or type selection number:

Si nous travaillons sur plusieurs applications écrites dans différentes versions de Java, il y a de fortes chances que nous ayons également besoin de différentes versions d'autres logiciels (par exemple, Maven, un serveur d’applications). Dans ce cas, nous pouvons envisager d’utiliser des abstractions plus grandes telles que les conteneurs Docker.

10. Conclusion

Pour résumer, dans cet article, nous avons vu des exemples d'installation d'un JDK à partir du référentiel «principal», à partir d'un PPA et manuellement. Nous avons brièvement comparé ces trois méthodes d’installation.

Et enfin, nous avons vu comment gérer plusieurs installations Java sur un système Ubuntu avecupdate-alternatives.

Comme étape suivante, il peut être utile deset the JAVA_HOME environment variable.