SDKMAN: gestión de versiones del JDK

Cambiar entre versiones de Java sin tocar las variables de entorno

Qué es SDKMAN

SDKMAN (Software Development Kit Manager) es una herramienta de línea de comandos para instalar, gestionar y cambiar entre múltiples versiones de SDKs en la misma máquina. Es el equivalente a nvm para Node.js o pyenv para Python, pero orientado al ecosistema JVM.

Funciona en Linux y macOS de forma nativa. En Windows requiere WSL2 o una alternativa como Jabba.

Instalación en Linux/macOS

# Instalar SDKMAN (Linux y macOS)
curl -s "https://get.sdkman.io" | bash

# Recargar el shell
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Verificar instalación
sdk version

Comandos básicos

El flujo habitual es: listar versiones disponibles → instalar la que se necesita → establecerla como predeterminada o activarla puntualmente para una sesión.

# Listar versiones disponibles de Java
sdk list java

# Instalar Java 8 (Temurin)
sdk install java 8.0.392-tem

# Ver versiones instaladas
sdk list java | grep installed

# Usar una versión concreta (solo en esta sesión de terminal)
sdk use java 8.0.392-tem

# Establecer como versión por defecto
sdk default java 8.0.392-tem

# Ver versión activa
sdk current java

Versiones por proyecto con .sdkmanrc

Cuando se trabaja con proyectos que requieren versiones distintas de Java, .sdkmanrc permite fijar la versión a nivel de directorio. Es análogo al .nvmrc de Node.

# Proyecto A necesita Java 8, proyecto B necesita Java 17
# En el directorio del proyecto, crear .sdkmanrc
cd ~/proyecto-a
sdk env init        # crea .sdkmanrc con la versión actual

# Editar .sdkmanrc manualmente si hace falta:
# java=8.0.392-tem

# Al entrar al directorio:
sdk env install     # instala si no está
sdk env             # activa la versión definida en .sdkmanrc

# Opción: activar automáticamente al cambiar de directorio
# En ~/.sdkman/etc/config:
# sdkman_auto_env=true

Alternativas en Windows

SDKMAN no tiene soporte oficial para Windows nativo. Las opciones más usadas:

  • WSL2: instalar Ubuntu desde Microsoft Store y usar SDKMAN dentro del subsistema Linux.
  • Jabba: alternativa multiplataforma con soporte nativo para Windows.
# SDKMAN no soporta Windows de forma nativa
# Opciones en Windows:

# Opción 1: WSL2 (Windows Subsystem for Linux)
# Instalar WSL2 con Ubuntu desde Microsoft Store
# Dentro de WSL2, instalar SDKMAN normalmente

# Opción 2: Git Bash
# SDKMAN funciona parcialmente en Git Bash
# No es la instalación recomendada

# Opción 3: Jabba (alternativa multiplataforma)
# https://github.com/shyiko/jabba
# Soporta Windows nativo + Linux + macOS

# En PowerShell (Jabba en Windows):
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-Expression (
  Invoke-WebRequest https://github.com/shyiko/jabba/raw/master/install.ps1 -UseBasicParsing
).Content

Gestión de Maven y Gradle con SDKMAN

SDKMAN no se limita al JDK. Gestiona también Maven, Gradle, Kotlin, Scala y otras herramientas del ecosistema JVM desde el mismo CLI.

# SDKMAN gestiona más herramientas que Java:

# Maven
sdk install maven 3.9.6
sdk default maven 3.9.6

# Gradle
sdk install gradle 8.5
sdk default gradle 8.5

# Kotlin, Scala, Groovy...
sdk list         # ver todos los candidatos disponibles
Recomendación: en Linux/macOS, instala SDKMAN antes de instalar el JDK manualmente. Te ahorrará gestionar JAVA_HOME y el PATH a mano, y cambiar de versión cuando lo necesites será trivial.

Siguiente apartado → Maven y Gradle: gestión de dependencias y construcción

Índice de la sección

Índice del curso