Cómo configurar JAVA_HOME en CentOS / RHEL / Fedora / AlmaLinux / Rocky Linux
JAVA_HOME es variable de entorno que apunta al directorio de instalación del JDK/JRE. Necesaria para Maven, Gradle, Tomcat, Jenkins, Kafka, Spark, Hadoop, Elasticsearch, y apps Java.
1. Localizar tu instalación Java
# Paquetes RPM (dnf/yum)
rpm -ql java-1.8.0-openjdk-devel | head -20
rpm -ql java-11-openjdk-devel | head -20
rpm -ql java-17-openjdk-devel | head -20
rpm -ql java-21-openjdk-devel | head -20
# Alternativa: alternatives
alternatives --config java
# Muestra rutas como /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el9.x86_64/bin/java
# JAVA_HOME = directorio PADRE de bin/ (sin /bin/java)
2. Establecer JAVA_HOME system-wide (todos los usuarios, persistente)
Opción A: /etc/profile.d/java.sh (recomendado, modular, sobrevive actualizaciones)
sudo tee /etc/profile.d/java.sh <<'EOF'
#!/bin/bash
# JAVA_HOME para OpenJDK 17 (ajusta versión instalada)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
sudo chmod +x /etc/profile.d/java.sh
Reinicia sesión o `source /etc/profile.d/java.sh`. Verifica: `echo $JAVA_HOME` → `/usr/lib/jvm/java-17-openjdk`.
Opción B: /etc/environment (simple, sin scripts)
sudo tee -a /etc/environment <<'EOF'
JAVA_HOME="/usr/lib/jvm/java-17-openjdk"
EOF
Requiere reinicio completo del sistema (no basta recargar shell).
Opción C: /etc/profile (tradicional, menos limpio)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' | sudo tee -a /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile
3. Establecer JAVA_HOME para usuario actual (~/.bashrc / ~/.bash_profile)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
Solo afecta a tu usuario, shells interactivos login/no-login según distro.
4. Gestionar múltiples versiones (alternatives / sdkman)
alternatives (nivel sistema)
alternatives --config java # elige java por defecto
alternatives --config javac # elige compilador
# JAVA_HOME dinámico en script:
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
SDKMAN! (por usuario, múltiples JDKs, fácil cambio)
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk list java
sdk install java 21.0.2-tem
sdk use java 21.0.2-tem
# SDKMAN auto-configura JAVA_HOME y PATH en ~/.bashrc/.zshrc
5. Verificar
echo $JAVA_HOME
java -version
javac -version
mvn -version # si usas Maven
gradle -v # si usas Gradle
6. Docker / Contenedores
En Dockerfile: `ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk` (imagen base ya lo trae). No dupliques en entrypoint.
7. Solución de problemas
- JAVA_HOME apunta a JRE no JDK: Maven/Gradle necesitan `tools.jar` (JDK). Asegura `-devel` / `-jdk` package.
- Ruta con symlink: `readlink -f` resuelve. `/usr/lib/jvm/java-17` suele ser symlink a versión concreta.
- Permisos: directorio legible/ejecutable por usuario que ejecuta la app.
- Systemd services: añade `Environment=JAVA_HOME=...` en unidad `.service` o `EnvironmentFile=/etc/profile.d/java.sh`.
- ·Cómo configurar un receptor de cine en casa
- ·Cómo configurar un sistema de home theater
- ·Cómo configurar un cine en casa paso a paso: desde la caja hasta la calibración
- ·Cómo configurar un sistema de cine en casa Sony: BRAVIA Theater, HT-A, STR y soundbars
- ·Cómo configurar un centro de entretenimiento en casa
- ·Cómo configurar una sala de medios en casa
- ·Cómo configurar un proyector de cine en casa principal
- ·Cómo configurar una cámara de seguridad para el hogar
- Cómo configurar una cámara de vigilancia doméstica
- Cómo configurar la iluminación para vídeo casero
- Cómo configurar una grabadora de CD doméstica
- Cómo Configurar Altavoces Estéreo en Casa (Posicionamiento y Cableado)
- Cómo configurar un centro de entretenimiento en casa
- Cómo configurar tu página de inicio en Opera
