Gestiona tus herramientas de desarrollo con SdkMan!!!

SdkMan (Software Development Kit Manager) es una utilidad que nos va a permitir instalar y gestionar, de forma simultánea, distintas versiones de nuestras herramientas de desarrollo, como por ejemplo: Gradle, Groovy, Java, Maven, Scala, …​

Índice de contenidos

SdkMan logo

1. Introducción

SdkMan nos va a facilitar la instalación de las distintas herramientas de desarrollo. Pero para mi lo importante, o donde más valor aporta, es “de forma simultánea“. Es decir podemos tener instaladas distintas versiones, por ejemplo de Java, y usar una u otra en función de nuestras necesidades.

Por ejemplo podemos tener Java 8 para nuestros desarrollos habituales y tener Java 9 para empezar a juguetear con las nuevas funcionalidades. SdkMan nos permitirá pasar de una a otra de forma muy sencilla y sin afectar al resto del sistema.

Ojo porque SdkMan no es lo mismo que jEnv. jEnv se limita a Java y no hace la instalación. De hecho podríamos usar ambos de forma combinada, por ejemplo SdkMan para instalar Java y jEnv para determinar la versión de Java en función del directorio en el que nos encontramos (SdkMan define uno por defecto y lo puedes cambiar para una Shell, pero no para un directorio concreto).



2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15” (2.5 GHz Intel i7, 16GB 1600 Mhz DDR3, 500GB Flash Storage).
  • AMD Radeon R9 M370X
  • Sistema Operativo: macOS Sierra 10.12.3
  • SdkMan 5.5.3+194


3. Instalación de SdkMan

La instalación es muy sencilla, basta con abrir un terminal y ejecutar:

Y luego:

Podemos comprobar que todo ha ido bien ejecutando:


SdkMan version

En nuestro caso hemos instalado la versión 5.5.3+194

Una de las cosas curiosas de este comando es que, tal como se ve en la imagen, no sólo nos dice la versión de SdkMan, sino las últimas versiones que tenemos disponibles para instalar. Lo podemos ver en el apartado BROADCAST.

Para ver todo lo que podemos hacer con SdkMan basta con ejecutar:

SdkMan help

Tras la instalación se habrá modificado nuestro ~/.bash_profile y al final del todo se habrán añadido las siguientes líneas:

SdkMan change bash_profile

También se habrá creado el directorio ~/.sdkman donde se guarda todo lo relacionado con esta utilidad, incluidos los binarios que instalemos.



4. Instalando Java 8 y 9 con SdkMan

Para saber que cosas podemos instalar con SdkMan basta con ejecutar:

SdkMan list

Así obtendremos la lista completa junto con la descripción de cada una de las herramientas de desarrollo que es capaz de gestionar SdkMan. Ahora mismo esta es la lista que es capaz de gestionar SdkMan recién instalado:

Vemos que Java está entre las herramientas que podemos instalar. Para ver que versiones están disponibles, usaremos ampliado el comando anterior:

SdkMan list java

Ahora instalamos Java 9 con:

SdkMan install java 9

En esta imagen podemos destacar como al principio nos pide la confirmación de la licencia de Oracle, luego se hace la descarga del archivo, y finalmente la instalación. Al final vemos en verde la confirmación de la instalación y de como se ha fijado Java 9 como la versión por defecto. Esto es porque no hay ninguna otra versión instalada, de lo contrario nos preguntaría si la versión que estamos instalando queremos fijarla por defecto o no.

Ahora instalamos Java 8 con:

SdkMan install java 8

Igual que antes nos pide la aceptación de la licencia de Oracle, luego hace la descarga y luego la instalación. La diferencia es que ahora sí que nos pregunta si queremos hacer que esta sea la versión por defecto (le contestamos que sí).

Si volvemos a listar las versiones de Java deberíamos ver lo siguiente:

SdkMan installed java versions

Con un * vemos las versiones que están instaladas, y con > vemos la versión que está fijada en la Shell donde ejecutamos el comando.



5. Cambiando entre versiones de Java con SdkMan

Una vez fijada la versión por defecto, esta será la usada por todo el sistema. Si queremos usar otra de las versiones instaladas basta con ejecutar:

SdkMan installed use java 9

A partir de aquí, en esta Shell la versión de Java activa será la 9. Lo podemos ver en la misma imagen como hacemos un mvn --version y vemos que la versión activa es ciertamente la 9-ea, y como el JAVA_HOME está fijado al directorio ~/.sdkman/candidates/java/9ea157

Esta magia se consigue básicamente manipulando la variable de entorno PATH y con algunos enlaces simbólicos.

SdkMan PATH environment variable

Esta parte del PATH es la que menos me gusta porque mientras más herramientas instalemos más “ensuciamos” la variable PATH (en la imagen vemos como está instalado maven, java y gradle). Pero es un pequeño precio a pagar por toda la funcionalidad que nos ofrece.



6. Conclusiones

SdkMan es un claro ejemplo de como se influencian unos lenguajes a otros. En este caso SdkMan, o como se conocía en sus inicios GVM (the Groovy enVironment Manager), se inspira en el RVM y rbenv de Ruby. Teniendo en cuenta la habitual lucha que hay entre lenguajes y plataformas, me parece un acierto y una alegría que en vez de trollear se aprovechen y se copien las buenas ideas.

Y desde luego ahora, gracias a SdkMan, no tenéis excusa para no instalar Java 9 y empezar a trastear ¡Buena caza y largas lunas!



7. Sobre el autor

Alejandro Pérez García (@alejandropgarci)
Ingeniero en Informática (especialidad de Ingeniería del Software) y Certified ScrumMaster

Socio fundador de Autentia Real Business Solutions S.L. – “Soporte a Desarrollo”

Socio fundador de ThE Audience Megaphone System, S.L. – TEAMS – “Todo el potencial de tus grupos de influencia a tu alcance”