Si eres desarrollador en Windows pero necesitas el ecosistema Linux, WSL2 (Subsistema de Windows para Linux 2) seguro que ya es parte esencial de tu entorno. Permite usar herramientas de línea de comandos y entornos Linux desde la comoddiad de Windows. Sin embargo, cuando acumulas proyectos que requieren distintas versiones de Java o Node.js, la gestión de versiones se vuelve un desafío. Descargar manualmente, configurar variables de entorno y cambiar entre versiones es ineficiente y propenso a errores.
En este artículo veremos cómo usar sdkman (para el ecosistema Java) y nvm (para Node.js) en WSL2 para construir un entorno de desarrollo eficiente, flexible y reproducible. No es solo una guía de instalación, sino una guía práctica con trucos, optimización y solución de problemas comunes para eliminar conflictos de versiones.
- Base del entorno: optimización y preparación de WSL2
Antes de instalar cualquier herramienta de gestión de versiones, asegúrate de que tu WSL2 sea sólido y eficiente. Esto evitará muchos errores misteriosos.
1.1 Instalación y configuración básica de WSL2
Verifica que estés usando WSL2, no WSL1. WSL2 ofrece un kernel Linux completo, con mejor rendimiento de sistema de archivos y compatibilidad de llamadas al sistema, crucial para aplicaciones Java y Node.js. En PowerShell (modo administrador), comprueba la versión:
wsl --list --verbose
Si aparece como versión 1, conviértelo con:
wsl --set-version <nombreDistribucion> 2
Recomendación: mueve la carpeta de instalación predeterminada de WSL2 a otra partición con más espacio para mejorar el rendimiento de I/O y ahorrar espacio en la unidad C:. Puedes exportar e importar la distribución.
Elige una distribución Linux adecuada. Ubuntu es popular por su amplio soporte y paquetes, pero Arch Linux o Debian también son opciones válidas. Este artículo usa Ubuntu 22.04 LTS, pero los principios aplican a todas.
Una vez instalado, actualiza los paquetes:
sudo apt update && sudo apt upgrade -y
1.2 Dependencias básicas y ajuste de red
Los scripts de instalación de sdkman y nvm dependen de herramientas como curl y unzip. Instálalos para estar seguros:
sudo apt install -y curl wget unzip zip ca-certificates
La conexión de red suele ser problemática en WSL2. Como WSL2 usa una red virtualizdaa, la configuración del proxy es independiente de la de Windows. Si necesitas proxy, configúralo dentro de WSL2. Un método común es añadir a ~/.bashrc o ~/.zshrc:
# Suponiendo que el proxy de Windows está en 127.0.0.1:7890
export http_proxy=http://$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):7890
export https_proxy=http://$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):7890
Este comando obtiene automáticamente la IP del host Windows (normalmente la dirección del servidor DNS de WSL2) y combina el puerto del proxy. Después, ejecuta source ~/.bashrc para aplicar los cambios.
- La navaja suiza del ecosistema Java: sdkman en profundidad
sdkman (Software Development Kit Manager) no solo gestiona versiones de Java, sino también otros SDKs del ecosistema JVM como Maven, Gradle, Spring Boot CLI, etc. Su filosofía es "una herramienta para gestionarlo todo", simplificando la configuración del entorno de desarrollo JVM.
2.1 Instalación de sdkman y su mecanismo interno
Instalar sdkman es sencillo con un solo comando:
curl -s "https://get.sdkman.io" | bash
Después de la instalación, reinicia la terminal o ejecuta:
source "$HOME/.sdkman/bin/sdkman-init.sh"
Para que se cargue automáticamente al abrir la shell, el script de instalación suele añadir esa línea a tu archivo de configuración de shell (por ejemplo, ~/.bashrc). Puedes verificarlo con cat ~/.bashrc | grep sdkman.
El funcionamiento de sdkman es elegante. Mantiene un repositorio de "candidatos SDK" en la carpeta .sdkman de tu directorio personal. Cada versión se instala de forma independiente en ~/.sdkman/candidates/<sdk>/<version>. Cuando usas sdk use o sdk default, modifica la variable de entorno PATH para anteponer el directorio bin de la versión correspondiente, logrando un cambio de versión transparente.
Verifica la instalación:
sdk version
Deberías ver una salida como SDKMAN! script: 5.18.2 native: 0.4.6.
2.2 Gestión de múltiples versiones de Java
La potencia de sdkman reside en su amplio soporte de distribuciones de Java. No solo ofrece Oracle JDK, sino también muchas distribuciones de alto rendimiento y código abierto, como:
- Temurin: del proyecto Eclipse Adoptium, el reemplazo directo de código abierto, impulsado por la comunidad y certificado por TCK.
- OpenJDK
(El artículo original continúa, pero aquí se ha truncado; la guía finaliza naturalmente en este punto).