Antes de profundizar en la configuración manual, conviene mencionar que SDKMAN es la herramienta más recomendada para administrar distintas versiones del JDK. Ofrece mayor estabilidad y automatiza gran parte del proceso. Si prefieres tener control total sin depender de gestores externos, la guía a continuación describe el procedimiento manual.
Descarga e instalación manual
Los binarios pueden obtenerse desde los sitios oficciales de cada distirbución (Oracle, OpenJDK, Adoptium, Tencent Kona, etc.). En este ejemplo se utiliza Tencent Kona para las versiones 8, 11 y 17.
# Descomprimir cada paquete en su directorio destino
sudo tar -xzf TencentKona-17.0.6.b1-jdk_linux-aarch64.tar.gz -C /Library/Java/JavaVirtualMachines/kona-17/
sudo tar -xzf TencentKona-11.0.14.b1-jdk_linux-aarch64.tar.gz -C /Library/Java/JavaVirtualMachines/kona-11/
sudo tar -xzf TencentKona8.0.9.b1_jdk_linux-aarch64_8u322.tar.gz -C /Library/Java/JavaVirtualMachines/kona-8/
Configuración de variables de entorno
El objetivo es definir rutas independientes para cada JDK y crear alias que permitan cambiar rápidamente entre ellas. La configuración se añade al archivo de perfil de tu shell (por ejemplo ~/.zshrc para Zsh).
# Rutas de cada versión instalada
export JDK8_PATH=/Library/Java/JavaVirtualMachines/jdk8/Contents/Home
export JDK11_PATH=/Library/Java/JavaVirtualMachines/jdk11/Contents/Home
export JDK17_PATH=/Library/Java/JavaVirtualMachines/jdk17/Contents/Home
# Versión activa por defecto
export JAVA_HOME=$JDK17_PATH
# Actualizar PATH y CLASSPATH dinámicamente
function setjdk() {
export JAVA_HOME=$1
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
}
# Atajos para alternar entre versiones
alias use-jdk8='setjdk $JDK8_PATH'
alias use-jdk11='setjdk $JDK11_PATH'
alias use-jdk17='setjdk $JDK17_PATH'
Después de guardar los cambios, recarga el perfil para que surtan efecto:
source ~/.zshrc
Alternancia entre versiones
Con los alias definidos, el cambio se realiza con un solo comando. Se puede verificar con java -version:
$ use-jdk8
$ java -version
java version "1.8.0_431"
Java(TM) SE Runtime Environment (build 1.8.0_431-b10)
$ use-jdk11
$ java -version
java version "11.0.25" 2024-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
$ use-jdk17
$ java -version
java version "17.0.13" 2024-10-15 LTS
Java(TM) SE Runtime Environment (build 17.0.13+10-LTS-268)
Integración con IDE y Maven
En IntelliJ IDEA es posible enlazar las variables de entorno definidas anteriormente. Para los proyectos gestionados con Maven, se puede referenciar la ruta del compilador directamente desde el pom.xml, asegurando que cada build utilice la versión correcta.
Configuración para proyectos con JDK 8
<properties>
<target.jdk>1.8</target.jdk>
<compiler.exec>${env.JDK8_PATH}/bin/javac</compiler.exec>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${target.jdk}</source>
<target>${target.jdk}</target>
<fork>true</fork>
<executable>${compiler.exec}</executable>
<showDeprecation>true</showDeprecation>
<optimize>true</optimize>
</configuration>
</plugin>
</plugins>
</build>
Configuración para proyectos con JDK 17
Escenario típico al trabajar con Spring Boot 3, que exige como mínimo JDK 17.
<properties>
<target.jdk>17</target.jdk>
<compiler.exec>${env.JDK17_PATH}/bin/javac</compiler.exec>
<spring.boot.version>3.1.7</spring.boot.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Build-Jdk>${target.jdk}</Build-Jdk>
<Open-Modules>java.lang,java.lang.reflect</Open-Modules>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Eliminación de una versión
Para desinstalar un JDK concreto basta con eliminar su directorio:
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk17