Sdkman – The Software Development Kit Manager

SDKMAN! es una herramienta para manejar versiones paralelas de múltiples Kits de Desarrollo de Software en la mayoría de los sistemas basados en Unix. En este post, aunque originalmente está pensando para sistemas Unix veremos su utilización mediante Java en su version 11 en entornos Windows, concretamente con Windows 10.

Proporciona una conveniente Interfaz de Línea de Comando (CLI) y API para instalar, cambiar, eliminar y listar candidatos.

Anteriormente conocido como GVM el Groovy enVironment Manager, fue inspirado por las muy útiles herramientas RVM y rbenv, utilizadas en general por la comunidad Ruby.

Para poder ser utilizando en entornos Windows es neceasario realizar una refacorización del código fuente del script bash original.

Existe una sección (install) en la propia página web dónde se indican los pasos a seguir para su instalación y utilización en entornos Windows.

Para mostrar su uso en Windows 10 se utiliza el Shell de Git Bash mediante el uso de este script get_sdkman_io (ya preparado para funcionar en entornos Windows).

Instalación

  1. Abrir un terminal de Git Bash.
  2. Descargar el fichero anterior get_sdkman_io.zip y descomprimirlo.
  3. Acceder a la carpeta del fichero descomprimido. Debe aparecer un fichero llamado get_sdkman_io.bash.
  4. Dentro del terminal ejecutar la instrucción
    ./get_sdkman_io.bash

    Una vez finalizado el proceso de ejecución aparecerá el resultado de la instalación de sdkman.
    Instalación finalizada

En este caso, ejecutando esta instrucción estoy indicando que quiero actualizar mi versión de Sdkman a la última publicada:

sdk selfupdate force

El resultado de la operación si todo ha ido correctamente consiste en la instalación de la última versión del Sdkman
Update Sdkman

Comandos de ejecución típicos

Comandos básicos

Este comando permite saber la versión del Sdkman:

sdk version

Este comando permite acceder a las opciones de ayuda del Sdkman:

sdk help

Este comando permite conocer la versión de Java que se encuentra en uso:

sdk current java

Este comando permite eliminar los datos temporales del Sdkman:

sdk flush <alias>

dónde alias puede disponer de uno de estos valores:

  • broadcast
    Flush broadcast

  • archives
    Flush archives

  • temp
    Flush temp

Listar software

Al ejecutar este comando se cargan en la consola todos los ejecutables que se pueden instalar mediante Sdkman:

sdk list

Teniendo en cuenta que estamos realizando las pruebas para el JDK de Java, podemos refinar la lista de opciones añadiendo java detrás:

sdk list java

mostrando sólo los JDKs disponibles de Java y que es posible instalar en la versión que se esté utilizando del Sdkman.

Este es el resultado:
Listar JDK disponibles

Instalar JDK

En este caso tenemos que añadir la versión (dentro del Sdkman se llama identifier) como último parámetro y cambiar el list por un install

sdk install java 11.0.7-open

De la lista anterior se va a realizar la instalación de la versión especificada por:
Vendor: Java.net
Versión: 11.0.7
Dist: open
Status: Vacío
Identifier: 11.0.7-open

Nota: El valor del identificador es el obtenido la hacer las pruebas en la versión 5.8.3+506 del Sdkman, puediendo variar al utilizar otras versiones que pudieran existir de distintas JDKs.

Una vez finalizado el proceso de instalación, el resultado se muestra mediante la consola:
Instalar JDK 11

Sin salir de la consola de comandos si volvemos a ejecutar el comando

sdk list java

se puede comprobar como ahora la columna Status tiene el valor de installed indicando que se ha instalado correctamente el Jdk.
Sdkman notifica version instalada

Importante.

Se pueden instalar tantos Jdks como se deseen o estén disponibles en la versión del Sdkman que se esté utilizando.

Desinstalar JDK

En este caso tenemos que añadir la versión (dentro del Sdkman se llama identifier) como último parámetro y cambiar el install por un uninstall

sdk uninstall java 11.0.7-open

Una vez finalizado el proceso de desinstalación, el resultado se muestra mediante la consola:
Desinstalar Jdk 11

Sin salir de la consola de comandos si ejecutamos de nuevo el comando:

sdk list java

se puede comprobar como ahora la columna Status vuelve a tener un valor vacío indicando que se ha desinstalado correctamente el Jdk seleccionado:
Ningún JDK activo

Utilización JDK instalado

Para una versión de Java especifica debe utilizarse este comando:

sdk use java 11.0.7-open

mostrando el resultado mediante el Shell:
Uso jdk instalado

Instalación de múltiples versiones de Java

Mediante SdkMan se pueden instalar múltiples versiones de Java que estén disponibles en la versión del Sdkman:

sdk list java

A modo de ejemplo se han instalado las versiones de Java 8, 11 y 12:
Múltiples versiones de Java
Como se puede comprobar en la imagen, además, de estas tres versiones, la versión 11.0.7-open se ha establecido como la versión por defecto.

Al ejecutar el comando de:

java version

se verifica que esta versión 11.0.7 es la activa:
Java version 11

Supongamos que queremos establecer por defecto la versión 8. En este caso, como ya la tenemos instalada sólo será necesario ejecutar el comando:

sdk use java 8.0.252-open

mostrando el resultado siguiente:
Nueva versión de Java por defecto

Si ejecutamos la instrucción java -version Sdkman nos mostrará un mensaje informándonos de la nueva versión establecida por defecto:
Nueva versión por defecto

También ejecutando la instrucción de sdk list java puede comprobarse como se ha establecido correctamente la nueva versión de Java:
Nueva versión de Jdk en Sdkman

Comentario final

Sdkman permite realizar la instalación de múltiples versiones de Java de forma sencilla y amigable.

Además, centraliza toda la gestión de las versiones desde una sola aplicación eliminando la complicación inherente a la instalación de distintas versiones de Java mediante los ejecutables específicos para Windows 10 (siendo el sistema estudiado).

También es importante indicar que pueden ejecutarse varias ventanas Shell dónde utilizar una versión distinta de Java en cada una de ellas.

Enlaces de interés

Página principal Sdkman.
Sdkman en Genbeta
Código fuente.
Sdkman on Windows.
Setup sdkman on windows 10.
Uso de toolchains Maven