¿Cómo determinar JAVA_HOME en Debian / Ubuntu?

95

En Ubuntu es posible tener varias JVM al mismo tiempo. El predeterminado se selecciona con update-alternatives. Pero esto no establece la JAVA_HOMEvariable de entorno, debido a una política de Debian .

Estoy escribiendo un script de inicio (bash), que inicia una aplicación java. Esta aplicación Java necesita la JAVA_HOMEvariable de entorno. Entonces, ¿cómo obtener la ruta de la JVM que está seleccionada actualmente por update-alternatives?

Witek
fuente

Respuestas:

137

Para el JRE, algo como esto debería hacer el truco:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
fuente
17
Necesitaba el hogar del JDK en lugar del JRE, pero obtuve esto usando: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") ¡Gracias!
Witek
cuando probé el comando echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), la salida era /usr/lib/jvm/java-7-oracle/jre/y no/usr/lib/jvm/java-7-oracle/
Sumit Ramteke
El código proporcionado en rsaddey funciona correctamente
Sumit Ramteke
43

La solución de danadam se puede adoptar fácilmente para recuperar la ruta JDK (es decir, no JRE) según sea necesario:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Busca el compilador Java javac (en lugar de java) incluido en JDK (pero no JRE).
  • No tiene seguimiento / (despojado por sed s: / bin ... en lugar de s: bin ...)
rsaddey
fuente
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

En .bashrcfue útil para mí.

David
fuente
9

Entonces, ¿estás diciendo que este comando no hace nada por ti?

sudo update-alternatives --config java 
djangofan
fuente
2
¿Se supone que debe configurar su JAVA_HOME? Descubrí que update-java-alternative es una mejor manera de actualizar Java, ya que update-alternative no actualiza todas las alternativas relacionadas con Java. Ver askubuntu.com/questions/141791
James McMahon
Es cierto, pero he encontrado instancias de Linux que tenían alternativas de actualización pero que no tenían instaladas alternativas de actualización-java.
djangofan
3

Instalé Java con

sudo apt-get install openjdk-7-jre-headless

y luego para encontrar la ubicación

ls -al /etc/alternatives/java
Prule
fuente
2

Como una extensión de danadams, responda:

En primer lugar, instale el segundo Java JRE como la tercera opción de Java, con prioridad de "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Luego, puede enumerarlos:

update-alternatives --list java

Puede configurar la alternativa a mano, usando esto:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Luego, su script puede configurarlo sobre la marcha, así:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Esto ilustra mejor lo que está haciendo el comando 'sed'. Aunque todavía necesita establecer los enlaces para javaw y javac, etc., cada uno se hace por separado.

djangofan
fuente
1

Hace un tiempo creé un tutorial en el foro de Ubuntu sobre cómo instalar el último JRE / JDK desde el sitio web de Java. También cubre cómo habilitarlo en todo el sistema, agregando la ubicación JRE / JDK a la variable PATH. Si lo desea, también puede agregar JAVA_HOME al script, mencionado al final del tema.

Compruébalo: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
fuente
1

Si Java está configurado con update-alternativeso fue agregado a su variable PATH manualmente, entonces no "/usr/bin/java"se necesita un código rígido . Yo uso esta solución en mi .bashrc:

export JAVA_HOME=$(readlink -m $(which java)/../..)

Freddy
fuente