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