Cómo instalar Java en Ubuntu 22.04


Instalación de Java en Ubuntu 22.04

Objetivo

Java es uno de los lenguajes de programación más populares del mercado. Su amplia adopción en los últimos años lo convierte en un lenguaje imprescindible en el mundo del desarrollo. Para más información sobre todas las posibilidades que ofrece el lenguaje Java, consulte la documentación oficial.


Esta guía explica cómo instalar Java Development Kit (JDK) en la distribución Ubuntu 22.04 de Linux.

 

Requisitos

Para poder seguir los pasos que se indican en esta guía, necesitará disponer de un VPS, un servidor Bare Metal o, como en nuestro ejemplo, una instancia Compute de OVHcloud con Ubuntu 22.04. Asimismo, también debe tener conocimientos básicos sobre el funcionamiento de una CLI. Si necesita ayuda para instalar una instancia Public Cloud con Ubuntu 22.04, consulte nuestra guía «Crear y conectarse a una instancia de Public Cloud».

 

Instrucciones

Esta guía utiliza OpenJDK. Se trata de la versión open source, pero existen muchas otras versiones con licencia de pago de otros proveedores (Oracle, Microsoft, AWS, etc.).

Esta guía explica los diferentes pasos que debemos seguir para instalar OpenJDK, utilizarlo y pasar de una versión instalada a otra diferente.

Durante la redacción de esta guía, la última versión publicada LTS de Java es la versión 17.x; la última versión GA es la versión 18.x.

 

Instalación de la versión LTS de OpenJDK

Utilice el comando apt-get para instalar Java en Ubuntu:

sudo apt-get update && apt-get -y install openjdk-17-jdk

Deberá obtener un resultado similar al que se incluye a continuación:

$ sudo apt-get update && apt-get -y install openjdk-17-jdk
Hit:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:2 http://nova.clouds.archive.ubuntu.com/ubuntu jammy InRelease
Hit:3 http://nova.clouds.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:4 http://nova.clouds.archive.ubuntu.com/ubuntu jammy-backports InRelease
Leyendo listas de paquetes... Completado
Creando árbol de dependencias... Completado
Leyendo información de estado... Completado
Se van a instalar los paquetes adicionales siguientes:
  adwaita-icon-theme alsa-topology-conf alsa-ucm-conf at-spi2-core ca-certificates-java dconf-gsettings-backend dconf-service fontconfig fontconfig-config
  fonts-dejavu-core fonts-dejavu-extra gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme java-common libasound2 libasound2-data
  libatk-bridge2.0-0 libatk-wrapper-java libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3 libavahi-common-data libavahi-common3
  libcairo-gobject2 libcairo2 libcups2 libdatrie1 libdconf1 libdeflate0 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libfontconfig1 libfontenc1
  libgail-common libgail18 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgif7 libgl1 libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglvnd0
  libglx-mesa0 libglx0 libgraphite2-3 libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libharfbuzz0b libice-dev libice6 libjbig0 libjpeg-turbo8 libjpeg8 liblcms2-2 libllvm13
  libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpciaccess0 libpcsclite1 libpixman-1-0 libpthread-stubs0-dev librsvg2-2 librsvg2-common libsm-dev libsm6
  libthai-data libthai0 libtiff5 libvulkan1 libwayland-client0 libwebp7 libx11-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0
  libxcb-present0 libxcb-randr0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcb1-dev libxcomposite1 libxcursor1 libxdamage1 libxdmcp-dev
  libxfixes3 libxft2 libxi6 libxinerama1 libxkbfile1 libxmu6 libxpm4 libxrandr2 libxrender1 libxshmfence1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1
  mesa-vulkan-drivers openjdk-17-jdk-headless openjdk-17-jre openjdk-17-jre-headless session-migration ubuntu-mono x11-common x11-utils x11proto-dev xorg-sgml-doctools
  xtrans-dev
...
update-alternatives: uso de /usr/lib/jvm/java-17-openjdk-amd64/bin/jhsdb para proporcionar /usr/bin/jhsdb (jhsdb) en modo automático
Configurando libgtk2.0-0:amd64 (2.24.33-2ubuntu2) ...
Configurando humanity-icon-theme (0.6.16)...
Configurando libgail18:amd64 (2.24.33-2ubuntu2)...
Configurando libgtk2.0-bin (2.24.33-2ubuntu2)...
Configurando libgail-common:amd64 (2.24.33-2ubuntu2) ...
Configurando openjdk-17-jre:amd64 (17.0.3+7-0ubuntu0.22.04.1) ...
Configurando ubuntu-mono (20.10-0ubuntu2)...
Configurando openjdk-17-jdk:amd64 (17.0.3+7-0ubuntu0.22.04.1)...
update-alternatives: usar /usr/lib/jvm/java-17-openjdk-amd64/bin/jconsole para proporcionar /usr/bin/jconsole (jconsole) en modo automático
Procesando disparadores para certificados ca (20211016)...
Actualizando certificados en /etc/ssl/certs...
0 añadido, 0 eliminado; completado.
Ejecutando enlaces en /etc/ca-certificates/update.d...

completado.
completado.
Procesando disparadores para libglib2.0-0:amd64 (2.72.1-1)...
Procesando disparadores para libc-bin (2.35-0ubuntu3)...
Procesando disparadores para man-db (2.10.2-1)...
Configurando at-spi2-core (2.44.0-3)...
Procesando disparadores para libgdk-pixbuf-2.0-0:amd64 (2.42.8+dfsg-1)...
Escaneando procesos...                                                                                                                                                     
Escaneando candidatos...                                                                                                                                                    
Escaneando imágenes de Linux...                                                                                                                                                  

Reiniciando los servicios...
 /etc/needrestart/restart.d/systemd-manager
 systemctl restart packagekit.service postgresql@14-main.service ssh.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-timesyncd.service systemd-udevd.service udisks2.service
Reinicios del servicio aplazados:
 systemctl restart systemd-logind.service
 systemctl restart user@1000.service

No es necesario reiniciar ningún contenedor.

No hay sesiones de usuario que ejecuten binarios obsoletos.

Ningún invitado de VM está ejecutando binarios obsoletos del hipervisor (qemu) en este host.

A continuación, compruebe la instalación:

java -version

Deberá obtener un resultado similar al que se incluye a continuación:

$ java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1, modo mixto, compartido)

Una práctica recomendable es definir una variable de entorno JAVA_HOME con la ruta de instalación de JDK.

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/ echo $JAVA_HOME

Deberá obtener un resultado similar al que se incluye a continuación:

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-amd64/
$ 

 

Gestión de dos o más instalaciones JDK

En algunos casos, es posible que tenga que utilizar otra versión de JDK para un proyecto específico. En ese caso, deberá instalar la versión específica de OpenJDK, tal y como se describe en esta guía.

sudo apt-get -y install openjdk-18-jdk

Deberá obtener un resultado similar al que se incluye a continuación:

$ sudo apt-get -y install openjdk-18-jdk
Leyendo listas de paquetes... Completado
Creando árbol de dependencias... Completado
Leyendo información de estado... Completado
Se van a instalar los paquetes adicionales siguientes:
  openjdk-18-jdk-headless openjdk-18-jre openjdk-18-jre-headless
Paquetes sugeridos:
  openjdk-18-demo openjdk-18-source visualvm libnss-mdns fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic
Van a instalarse los siguientes paquetes nuevos:
  openjdk-18-jdk openjdk-18-jdk-headless openjdk-18-jre openjdk-18-jre-headless
0 actualizados, 4 recién instalados, 0 por eliminar y 12 no actualizados.
Necesita 268 MB de archivos.
Tras esta operación, se utilizarán 421 MB de espacio adicional en disco.
Get:1 http://nova.clouds.archive.ubuntu.com/ubuntu jammy/universe amd64 openjdk-18-jre-headless amd64 18~36ea-1 [48,0 MB]
Get:2 http://nova.clouds.archive.ubuntu.com/ubuntu jammy/universe amd64 openjdk-18-jre amd64 18~36ea-1 [180 kB]
Get:3 http://nova.clouds.archive.ubuntu.com/ubuntu jammy/universo amd64 openjdk-18-jdk-headless amd64 18~36ea-1 [220 MB]
Get:4 http://nova.clouds.archive.ubuntu.com/ubuntu jammy/universo amd64 openjdk-18-jdk amd64 18~36ea-1 [10,9 kB]
268 MB en 5s (58,3 MB/s)           
..
update-alternatives: uso de /usr/lib/jvm/java-18-openjdk-amd64/bin/jhsdb para proporcionar /usr/bin/jhsdb (jhsdb) en modo automático
Configurando openjdk-18-jdk:amd64 (18~36ea-1)...
update-alternatives: uso de /usr/lib/jvm/java-18-openjdk-amd64/bin/jconsole para proporcionar /usr/bin/jconsole (jconsole) en modo automático
Procesando disparadores para hicolor-icon-theme (0.17-2)...
Escaneando procesos...                                                                                                                                                     
Escaneando candidatos...                                                                                                                                                    
Escaneando imágenes de Linux...                                                                                                                                                  

Reiniciando los servicios...
Reinicios del servicio aplazados:
 systemctl restart systemd-logind.service
 systemctl restart user@1000.service

No es necesario reiniciar ningún contenedor.

No hay sesiones de usuario que ejecuten binarios obsoletos.

Ningún invitado de VM está ejecutando binarios obsoletos del hipervisor (qemu) en este host.

A continuación, compruebe la nueva instalación:

java -version

Deberá obtener un resultado similar al que se incluye a continuación:

$ java -version
openjdk version "18-ea" 2022-03-22
OpenJDK Runtime Environment (build 18-ea+36-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 18-ea+36-Ubuntu-1, mixed mode, sharing)

A continuación, defina la variable de entorno JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-18-openjdk-amd64/ echo $JAVA_HOME

Deberá obtener un resultado similar al que se incluye a continuación:

$ export JAVA_HOME=/usr/lib/jvm/java-18-openjdk-amd64/
$ echo $JAVA_HOME
/usr/lib/jvm/java-18-openjdk-amd64/
$ 

No resulta práctico volver a la versión 17. Afortunadamente, existe una herramienta-update-alternatives.

sudo update-alternatives --config java

Deberá obtener un resultado similar al que se incluye a continuación:

$ sudo update-alternatives --config java
Hay dos opciones para el Java alternativo (proporcionando /usr/bin/java).

  Selección    Ruta                                         Prioridad   Estado
------------------------------------------------------------
* 0            /usr/lib/jvm/java-18-openjdk-amd64/bin/java   1811      auto mode
  1            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   1711      manual mode
  2            /usr/lib/jvm/java-18-openjdk-amd64/bin/java   1811      manual mode

Presione para mantener la opción actual[*] o escriba el número de selección: 1
alternativas-actualizaciones: uso de /usr/lib/jvm/java-17-openjdk-amd64/bin/java para proporcionar /usr/bin/java (java) en modo manual

Compruebe que ha seleccionado la nueva versión de Java.

java -version

Deberá obtener un resultado similar al que se incluye a continuación:

$ java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1, modo mixto, compartido)

⚠️ Advertencia:⚠️ si ha definido la variable de entorno JAVA_HOME, debe actualizarla con la ruta correcta.

 

Probar la instalación de JDK

Para probar la instalación de Java mediante la creación de una aplicación Hello World, cree un archivo HelloWorld.java y pegue el siguiente código:

public class HelloWorld { public static void main(String[] args) { System.out.println("👋 ¡Hola, mundo!"); }

Guarde y compile el archivo y, a continuación, ejecútelo.

javac HelloWorld.java java HelloWorld

Deberá obtener un resultado similar al que se incluye a continuación:

$ javac HelloWorld.java 
$ java HelloWorld.java 
👋 ¡Hola, mundo!

¡Enhorabuena! Ya ha instalado y configurado correctamente OpenJDK en Ubuntu 22.04.