Table of contents

Que es SDKMAN?

SDKMAN! es una herramienta de línea de comandos para gestionar versiones de software de desarrollo en sistemas Unix. Permite instalar, actualizar y cambiar entre diferentes versiones de herramientas como Java, Groovy, Scala, Kotlin, entre otros.

En este artículo, veremos cómo instalar SDKMAN! y cómo usarlo para gestionar versiones de Java.

Instalar SDKMAN

Corre el instalador con el usuario que usas para desarrollar, en tu directorio hogar.

Mientras estas en tu directorio hogar, corre el comando curl mostrado aqui:

Sat 2025Jul26 22:40:06 UTC
devuser@devops-u1
~
hist:91 -> sudo curl -s "https://get.sdkman.io" | bash
…
Set version to 5.19.0 ...
Set native version to 0.7.4 ...
Attempt update of interactive bash profile on regular UNIX...
Added sdkman init snippet to /home/devuser/.bashrc
Attempt update of zsh profile...
Updated existing /home/devuser/.zshrc

All done!

You are subscribed to the STABLE channel.

Please open a new terminal, or run the following in the existing one:

    source "/home/devuser/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!

Cárgalo (source) tal como lo sugirió el instalador.

->  source "/home/devuser/.sdkman/bin/sdkman-init.sh"

Verifica la versión de sdk.

-> sdk version
SDKMAN!
script: 5.19.0
native: 0.7.4 (linux x86_64)

La instalación agrega un comando export a ~/.bashrc.

#ESTO DEBE ESTAR AL FINAL DEL ARCHIVO PARA QUE SDKMAN FUNCIONE!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

De esta manera, cada vez que abras una terminal, SDKMAN estará disponible para su uso.

Lista todos los candidatos.

-> sdk list

Instalar y gestionar versiones de Java

Lista todas las versiones de JAVA con sdk list java

Lista solo JAVA.

-> sdk list java

================================================================================
Available Java Versions for Linux 64bit
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
…
 Oracle        |     | 24.0.2       | oracle  |            | 24.0.2-oracle
               |     | 24.0.1       | oracle  |            | 24.0.1-oracle
               |     | 24           | oracle  |            | 24-oracle
               |     | 23.0.2       | oracle  |            | 23.0.2-oracle
               |     | 22.0.2       | oracle  |            | 22.0.2-oracle
               |     | 21.0.8       | oracle  |            | 21.0.8-oracle
               |     | 21.0.7       | oracle  |            | 21.0.7-oracle
               |     | 21.0.6       | oracle  |            | 21.0.6-oracle
               |     | 17.0.12      | oracle  |            | 17.0.12-oracle
…

 Zulu          |     | 24.crac      | zulu    |            | 24.crac-zulu
               |     | 24.fx        | zulu    |            | 24.fx-zulu
               |     | 24.0.2       | zulu    |            | 24.0.2-zulu
               |     | 24.0.1.crac  | zulu    |            | 24.0.1.crac-zulu
               |     | 24.0.1.fx    | zulu    |            | 24.0.1.fx-zulu
               |     | 24.0.1       | zulu    |            | 24.0.1-zulu
               |     | 24           | zulu    |            | 24-zulu
               |     | 23.0.2.fx    | zulu    |            | 23.0.2.fx-zulu
               |     | 23.0.2       | zulu    |            | 23.0.2-zulu
               |     | 23.0.1.crac  | zulu    |            | 23.0.1.crac-zulu
               |     | 21.0.8       | zulu    |            | 21.0.8-zulu
               |     | 21.0.7.crac  | zulu    |            | 21.0.7.crac-zulu
               |     | 21.0.7.fx    | zulu    |            | 21.0.7.fx-zulu
               |     | 21.0.7       | zulu    |            | 21.0.7-zulu
               |     | 21.0.6.crac  | zulu    |            | 21.0.6.crac-zulu
               |     | 21.0.6.fx    | zulu    |            | 21.0.6.fx-zulu
               |     | 21.0.6       | zulu    |            | 21.0.6-zulu
               |     | 21.0.5.crac  | zulu    |            | 21.0.5.crac-zulu
               |     | 17.0.16      | zulu    |            | 17.0.16-zulu
               |     | 17.0.15.crac | zulu    |            | 17.0.15.crac-zulu
               |     | 17.0.15.fx   | zulu    |            | 17.0.15.fx-zulu
               |     | 17.0.15      | zulu    |            | 17.0.15-zulu
               |     | 17.0.14.crac | zulu    |            | 17.0.14.crac-zulu
               |     | 17.0.14.fx   | zulu    |            | 17.0.14.fx-zulu
               |     | 17.0.14      | zulu    |            | 17.0.14-zulu
               |     | 17.0.13.crac | zulu    |            | 17.0.13.crac-zulu
               |     | 11.0.28      | zulu    |            | 11.0.28-zulu
               |     | 11.0.27.fx   | zulu    |            | 11.0.27.fx-zulu
               |     | 11.0.27      | zulu    |            | 11.0.27-zulu
               |     | 11.0.26.fx   | zulu    |            | 11.0.26.fx-zulu
               |     | 11.0.26      | zulu    |            | 11.0.26-zulu
               |     | 8.0.462      | zulu    |            | 8.0.462-zulu
               |     | 8.0.452.fx   | zulu    |            | 8.0.452.fx-zulu
               |     | 8.0.452      | zulu    |            | 8.0.452-zulu
               |     | 8.0.442.fx   | zulu    |            | 8.0.442.fx-zulu
               |     | 8.0.442      | zulu    |            | 8.0.442-zulu
               |     | 7.0.352      | zulu    |            | 7.0.352-zulu
               |     | 6.0.119      | zulu    |            | 6.0.119-zulu
=================================================================================

La lista muestra las versiones disponibles de Java a esta fecha. Muestra el proveedor (Vendor), el estado (Status) y el identificador (Identifier) para cada versión.

Si ejecutas el comando de instalación y presionas tab, listará todo así (salida recortada)

-> sdk install java <presiona tab>

Display all 285 possibilities? (y or n)
11.0.14.1-jbr        17.0.16-ms           23.0.2-zulu          25.ea.16-graal
11.0.15-trava        17.0.16-sapmchn      23.0.2.fx-librca     25.ea.16-open
11.0.25-albba        17.0.16-sem          23.0.2.fx-zulu       25.ea.17-graal
(…snip…)
17.0.15-tem          23.0.1.crac-zulu     24.fx-librca         8.0.462-librca
17.0.15-zulu         23.0.2-amzn          24.fx-zulu           8.0.462-sem
17.0.15.crac-librca  23.0.2-graal         25.ea.10-open        8.0.462-tem
17.0.15.crac-zulu    23.0.2-graalce       25.ea.13-graal       8.0.462-zulu
17.0.15.fx-librca    23.0.2-librca        25.ea.14-graal       8.0.462.fx-librca
17.0.15.fx-zulu      23.0.2-oracle        25.ea.14-open
17.0.16-amzn         23.0.2-sapmchn       25.ea.15-graal
17.0.16-librca       23.0.2-tem           25.ea.15-open

La sintaxis del comando de instalación es:

sdk install java <version>

La versión puede ser el identificador completo o una parte del mismo, como 11.0.28-zulu o simplemente 11.

Es mejor practica especificar exactamente la versión completa a instalar para evitar confusiones. Por ejemplo 11.0.28-zulu.

Instalar una versión específica de java

-> sdk install java 8.0.462-zulu
Downloading: java 8.0.462-zulu
In progress...
########## 100.0%
Repackaging Java 8.0.462-zulu...
Done repackaging...

Instalar otra versión.

Nota que, si ya tienes otra versión instalada previamente, preguntará si deseas establecer esta nueva instalación como predeterminada. Simplemente responde y o n según lo que desees.

-> sdk install java 11.0.28-zulu
Downloading: java 11.0.28-zulu
In progress...
########## 100.0%
Repackaging Java 11.0.28-zulu...
Done repackaging...
Installing: java 11.0.28-zulu
Done installing!
Do you want java 11.0.28-zulu to be set as default? (Y/n): y
Setting java 11.0.28-zulu as default.

-> sdk install java 17.0.16-zulu
Downloading: java 17.0.16-zulu
In progress...
##########  100.0%
Repackaging Java 17.0.16-zulu...
Done repackaging...
Installing: java 17.0.16-zulu
Done installing!
Do you want java 17.0.16-zulu to be set as default? (Y/n): n

Verifica cuál es la version de java actual activa por defecto.

-> sdk current java
Using java version 11.0.28-zulu

Desinstalar Version de Java

Para desinstalar alguna version de JAVA simplemente haz lo contrario del comando de instalación.

-> sdk uninstall java 11.0.28-zulu

Listar Versiones de Java

Lista solo las versiones de JAVA.

El comando de listar muestra las versiones instaladas marcadas port la palabra installed.

-> sdk list java

               |     | 11.0.26      | zulu    |            | 11.0.26-zulu
               | >>> | 8.0.462      | zulu    | installed  | 8.0.462-zulu
               |     | 8.0.452.fx   | zulu    |            | 8.0.452.fx-zulu
               |     | 8.0.452      | zulu    |            | 8.0.452-zulu

Ubicación de las versiones de Java en SDKMAN

Hemos estado ejecutando todos los comandos de SDKMAN con nuestro usuario en nuestro directorio home.

En Ubuntu, SDKMAN coloca todas las instalaciones en $HOME/.sdkman/candidates/java

-> ls -l /home/devuser/.sdkman/candidates/java
total 12
drwxr-xr-x 10 devuser devuser 4096 Jul  2 12:10 11.0.28-zulu/
drwxr-xr-x 10 devuser devuser 4096 Jun 30 16:33 17.0.16-zulu/
drwxr-xr-x  9 devuser devuser 4096 Jul  2 11:57 8.0.462-zulu/
lrwxrwxrwx  1 devuser devuser   12 Jul 26 23:02 current -> 11.0.28-zulu/

La versión activa por defecto está claramente marcada con la palabra current, o corriente.

Cambiar entre diferentes versiones de Java

Una vez que hemos instalado varias versiones de Java, ahora vamos a cambiar entre ellas.

Usar Java17

Sat 2025Jul26 23:13:14 UTC
devuser@devops-u1
~/.sdkman/candidates/java
hist:111 -> sdk use java  17.0.16-zulu
Using java version 17.0.16-zulu in this shell.

-> java -version
openjdk version "17.0.16" 2025-07-15 LTS
OpenJDK Runtime Environment Zulu17.60+17-CA (build 17.0.16+8-LTS)
OpenJDK 64-Bit Server VM Zulu17.60+17-CA (build 17.0.16+8-LTS, mixed mode, sharing)

Usar Java8

-> sdk use java 8.0.462-zulu
Using java version 8.0.462-zulu in this shell.

-> java -version
openjdk version "1.8.0_462"
OpenJDK Runtime Environment (Zulu 8.88.0.19-CA-linux64) (build 1.8.0_462-b08)
OpenJDK 64-Bit Server VM (Zulu 8.88.0.19-CA-linux64) (build 25.462-b08, mixed mode

Usar Java11

-> sdk use java 11.0.28-zulu

-> java -version
openjdk version "11.0.28" 2025-07-15 LTS
OpenJDK Runtime Environment Zulu11.82+19-CA (build 11.0.28+6-LTS)
OpenJDK 64-Bit Server VM Zulu11.82+19-CA (build 11.0.28+6-LTS, mixed mode)

Verificar la versión de Java

Aunque hemos cambiado la versión de Java en la sesión actual, el enlace simbólico current no cambia. Esto es normal, ya que sdk use java solo afecta a la sesión actual del shell.

En seguida verificamos la version establecida por defecto.

-> sdk current java
Using java version 11.0.28-zulu

Ahora observamos que la versión actual reflejada en el directorio de instalación no cambia cuando usas sdk use java <version>.

Sat 2025Jul26 23:22:37 UTC
devuser@devops-u1
~
hist:147 -> ls -l /home/devuser/.sdkman/candidates/java
total 12
drwxr-xr-x 10 devuser devuser 4096 Jul  2 12:10 11.0.28-zulu/
drwxr-xr-x 10 devuser devuser 4096 Jun 30 16:33 17.0.16-zulu/
drwxr-xr-x  9 devuser devuser 4096 Jul  2 11:57 8.0.462-zulu/
lrwxrwxrwx  1 devuser devuser   12 Jul 26 23:02 current -> 11.0.28-zulu/

El comando sdk use java … solo cambia las variables de entorno JAVA_HOME y PATH para la sesión actual del shell. NO cambia el enlace simbólico actual en el directorio de SDKMAN!.

El enlace simbólico actual solo se actualiza cuando ejecutas sdk default java ... o sdk install java ..., no con sdk use java ....

Así que usas sdk use java para un cambio temporal, solo en la shell (no actualiza el enlace simbólico).

Usa sdk default java para un cambio permanente, y actualiza el enlace simbólico para afectar nuevas shells.

Establecer una versión de Java como predeterminada

Asi que cambiemos completamene a usar 17.0.16-zulu y verifiquemos el ajuste.

-> sdk use java 17.0.16-zulu
Using java version 17.0.16-zulu in this shell.

-> sdk default java 17.0.16-zulu
setting java 17.0.16-zulu as the default version for all shells.

-> sdk current java
Using java version 17.0.16-zulu

-> java -version
openjdk version "17.0.16" 2025-07-15 LTS
OpenJDK Runtime Environment Zulu17.60+17-CA (build 17.0.16+8-LTS)
OpenJDK 64-Bit Server VM Zulu17.60+17-CA (build 17.0.16+8-LTS, mixed mode, sharing)

-> ls -l /home/devuser/.sdkman/candidates/java
total 12
drwxr-xr-x 10 devuser devuser 4096 Jul  2 12:10 11.0.28-zulu/
drwxr-xr-x 10 devuser devuser 4096 Jun 30 16:33 17.0.16-zulu/
drwxr-xr-x  9 devuser devuser 4096 Jul  2 11:57 8.0.462-zulu/
lrwxrwxrwx  1 devuser devuser   50 Jul 27 03:24 current -> /home/devuser/.sdkman/candidates/java/17.0.16-zulu/

Referencias

Regresar a la página principal.