Entorno de desarrollo ideal para Quarkus: múltiples versiones de Java, Maven y Quarkus CLI

Antes de sumarte a una misión con múltiples microservicios Quarkus es clave contar con un entorno de desarrollo flexible, limpio y fácil de mantener. En esta guía te muestro cómo instalar Java (OpenJDK y GraalVM/Mandrel), Maven y Quarkus CLI usando SDKMAN!, una herramienta que no sólo simplifica la instalación, sino que además te permite cambiar entre distintas versiones de Java configurando JAVA_HOME automáticamente.


🧰 ¿Qué es SDKMAN!?

Es un gestor de versiones para herramientas del ecosistema Java, como JDKs, Maven, Gradle, y por supuesto, Quarkus CLI.
Y lo mejor de todo es que te permite tener varias versiones instaladas y alternar entre ellas fácilmente evitando todo tipo de conflictos. Esto lo hace ideal para entornos de microservicios con varias versiones Java LTS soportadas por Quarkus: Java 17 (mínima soportada por Quarkus) o Java 21 (recomendada para nuevos despliegues).


Instalando SDKMAN!

En Linux, macOS y WSL (Windows Subsystem for Linux) ejecuta:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

Luego, en una nueva ventana de terminal, verifica que se instaló correctamente:

sdk version

Instalando Java, Maven y Quarkus CLI con SDKMAN!

Sólo ejecuta los comandos en la nueva terminal:

sdk install maven
sdk install quarkus
sdk install java

Comprueba que todo quedó operativo con esta verificación rápida de versiones:

mvn -v
quarkus --version
java -version

Se han instalado las últimas versiones de Maven y Quarkus CLI. En el caso de Java, se ha instalado la última versión LTS de Eclipse Temurin, la distribución de Java mantenida por el proyecto Eclipse Adoptium (antes AdoptOpenJDK) y opción por defecto en SDKMAN! Es estable, ampliamente usada en producción y una apuesta segura para entornos portables. 

Si trabajas con RHBQ(Red Hat build of Quarkus) , Red Hat soporta el uso de cualquier JDK de Adoptium en modo JVM; el soporte se limita a problemas en Quarkus.

El autocompletado de Quarkus CLI permite que la terminal sugiera y complete comandos y opciones a medida que los escribes, facilitando el trabajo y reduciendo errores. Para activarlo de forma permanente, basta con añadir ejecutar la siguiente línea a la configuración de tu shell:

echo "source <(quarkus completion)" >> ~/.bashrc   # o ~/.zshrc

Usa ~/.bashrc si tu shell predeterminada es Bash (la más común en muchas distribuciones Linux y en WSL), o ~/.zshrc si usas Zsh (predeterminada en macOS recientes y en algunas configuraciones personalizadas de Linux). Si no estás seguro, puedes verificarlo ejecutando echo $SHELL.


☕ Instalando otras versiones de Java (Temurin, GraalVM, Mandrel)

Comencemos consultando qué versiones de Temurin (tem) están disponibles:

sdk list java | grep tem

Verás algo como:

Temurin       |   | 24.0.1   | tem     |           | 24.0.1-tem          
              |>>>| 21.0.8   | tem     | installed | 21.0.8-tem          
              |   | 21.0.7   | tem     |           | 21.0.7-tem          
              |   | 21.0.6   | tem     |           | 21.0.6-tem          
              |   | 17.0.16  | tem     |           | 17.0.16-tem         
              |   | 11.0.27  | tem     |           | 11.0.27-tem 
              |   | 8.0.452  | tem     |           | 8.0.452-tem

Esto te permite elegir la versión que quieras instalar con total confianza.
Si quieres instalar Java 17, puedes instalarlo así indicando su identificador:

sdk install java 17.0.16-tem

GraalVM permite compilar aplicaciones Java como ejecutables nativos. Esto acelera drásticamente el tiempo de inicio y reduce el uso de memoria, lo que lo hace ideal para ciertos casos de uso. 

Mandrel es una versión especializada de GraalVM, enfocada y optimizada por Red Hat para funcionar específicamente con Quarkus, lo que la hace la opción ideal.

Para conocer los casos de uso de ejecutables nativos, visita el artículo JAR vs ejecutable nativo en Quarkus

Si optas por Mandrel, consulta las versiones disponibles así:

sdk list java | grep r21-mandrel

‼️ El versionado de Mandrel utiliza un esquema propio (como 23.1.8.r21-mandrel) para su distribución de Native Image, aunque ésta se construye sobre una versión específica y estable de OpenJDK.

La versión de Java utilizada como base se indica con el prefijo rXX en el identificador de Mandrel (por ejemplo, r21-mandrel), lo que nos permite filtrar las versiones que se basan en OpenJDK 21.

Verás algo como:

|   | 23.1.8.r21 | mandrel |            | 23.1.8.r21-mandrel
|   | 23.1.7.r21 | mandrel |            | 23.1.7.r21-mandrel  
|   | 23.1.6.r21 | mandrel |            | 23.1.6.r21-mandrel 

⚠️ Mandrel no está disponible en macOS con arquitectura amd64/x86. En ese caso puedes optar por usar Mandrel desde un contenedor o ir directamente por GraalVM (explicado más adelante).

Instala la última versión que veas disponible, en este caso:

sdk install java 23.1.8.r21-mandrel

Por último, debes configurar la variable de entorno GRAALVM_HOME con el directorio de instalación de Mandrel, ya que SDKMAN! no la administra automáticamente como lo hace con JAVA_HOME. Para ver el directorio de instalación de Mandrel ejecuta:

sdk home java 23.1.8.r21-mandrel

Por lo tanto, agregas al final de tu archivo de entorno (~/.bashrc, ~/.zshrc, etc.):

# Configuración para ejecutables nativos con Quarkus
export GRAALVM_HOME=$(sdk home java 23.1.8.r21-mandrel)

Actualiza el shell y verifica que GRAALVM_HOME haya quedado configurada, por ejemplo:

source ~/.zshrc
echo $GRAALVM_HOME

GraalVM Community Edition (Graal CE) es la versión gratuita y de código abierto de GraalVM. Si no pudiste instalar Mandrel por alguna razón o prefieres ir por Graal CE, puedes ver las versiones disponible con:

sdk list java | grep graalce

Luego instalas va última versión disponible y configura la variable de entorno GRAALVM_HOME tal como explicamos antes para Mandrel.

Para profundizar más en las diferencias entre GraalVM y Mandrel, visita el artículo GraalVM, Mandrel y el runtime oculto


🧭 Fijar la versión de Java: global y temporal

Una vez que tengas las versiones de Java instaladas, puedes gestionarlas así:

🌐 Establecer Java 21.0.8-tem como predeterminada globalmente (default):

sdk default java 21.0.8-tem

📌 Usar Java 17.0.16-tem solo en la terminal actual (use):

sdk use java 17.0.16-tem

🔄 Actualizar

Siempre es buena práctica mantener estas herramientas actualizadas. Ejecuta periódicamente los comandos:

sdk upgrade quarkus
sdk upgrade maven
sdk upgrade java

Todo listo. Ya puedes comenzar tus misiones por el Quarkiverso. ¡Buen viaje!🚀