SDKman es una herramienta que nos facilita enormemente la instalación y gestión de múltiples versiones de Java y otras herramientas relacionadas dentro de sistemas operativos basados en Unix, como macOS, Linux o BSD, e incluso en Windows si usamos entornos compatibles con shell, como el subsistema Linux para Windows o MSYS.
La idea principal de SDKman es evitar la instalación global tradicional de Java o herramientas como Gradle, Maven o SBT. En lugar de eso, SDKman descarga y mantiene estas herramientas en un directorio oculto dentro de nuestro usuario, típicamente .sdkman, gestionando múltiples versiones en paralelo. Esto es especialmente útil cuando trabajamos con proyectos que requieren versiones específicas de estas herramientas, por ejemplo, un proyecto antiguo que necesita una versión concreta de Gradle.
Si venimos de otros lenguajes, SDKman funciona de manera similar a herramientas como NVM para JavaScript, pero adaptado al ecosistema Java. Con un simple comando de instalación, tendremos SDKman listo para descargar y gestionar máquinas virtuales de Java, compiladores y herramientas de construcción.
Entre las opciones que SDKman nos ofrece, podemos instalar diferentes distribuciones de JDK, como OpenJDK de jdk.java.net, Temurin, Azul, Microsoft o incluso el SDK oficial de Oracle. Además, podemos instalar herramientas como Gradle, Maven, SBT para Scala, Kotlin, Leiningen para Clojure, y clis auxiliares para frameworks modernos como Quarkus, Micronaut o Spring Boot.
Para usar SDKman, necesitamos un sistema compatible con shell. En Windows, esto puede lograrse mediante el subsistema Linux para Windows o entornos como Git Bash. La instalación es sencilla: copiamos y pegamos el script de instalación en la terminal, lo que crea el directorio .sdkman en nuestro usuario y modifica los archivos de configuración de la shell para cargar SDKman automáticamente.
Si preferimos no modificar automáticamente nuestros archivos de configuración, podemos instalar SDKman con la variable rcupdate en false y configurar manualmente la carga del entorno.
Una vez instalado, tras reiniciar la terminal o hacer un source del script, tendremos disponible el comando sdk. Con sdk list podemos ver todas las herramientas y versiones disponibles para instalar. Por ejemplo, para instalar Java, primero listamos las versiones con sdk list java, elegimos la versión deseada, por ejemplo 17.0.7-tem para Temurin 17, y la instalamos con:
sdk install java 17.0.7-tem
La primera versión que instalemos se establecerá como la versión por defecto. Si instalamos una segunda versión, como Java 20 de Temurin, el instalador nos preguntará si queremos cambiar la versión por defecto. Podemos elegir mantener la versión anterior y cambiar temporalmente a la nueva con:
sdk use java 20-tem
Este cambio solo afecta a la sesión actual de la terminal. Para hacer el cambio permanente, usamos:
sdk default java 20-tem
Lo mismo aplica para otras herramientas. Por ejemplo, para instalar la línea de comandos de Spring Boot, podemos hacer:
sdk install springboot
Esto instalará la versión más reciente. Si queremos usar una versión específica, primero listamos las versiones con sdk list springboot y luego usamos sdk use o sdk default para cambiar la versión activa.
Una funcionalidad muy útil es el comando sdk env, que nos permite definir en un archivo las versiones específicas de todas las herramientas que queremos usar en un proyecto. Así, con un solo comando podemos cargar ese entorno y asegurarnos de que todas las herramientas estén en la versión correcta.
También podemos obtener la ruta de instalación de una herramienta con sdk home, por ejemplo:
sdk home java 20-tem
Esto es especialmente útil para configurar variables de entorno como JAVA_HOME en IDEs que no detectan automáticamente las instalaciones gestionadas por SDKman.
Aunque SDKman no es la única herramienta para gestionar versiones en el ecosistema Java, es una opción muy práctica y flexible que nos permite mantener nuestro entorno de desarrollo ordenado y adaptado a las necesidades de cada proyecto. Para sacarle el máximo provecho, es recomendable tener un conocimiento básico del uso de la terminal y la gestión de entornos en sistemas Unix.
Con SDKman, podemos olvidarnos de complicaciones al instalar y cambiar entre versiones de Java y herramientas relacionadas, y centrarnos en lo que realmente importa: desarrollar nuestros proyectos con la configuración adecuada.