¿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?

Respuestas:


137

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

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

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 ...)

12

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

En .bashrcfue útil para mí.


9

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

sudo update-alternatives --config java 

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

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.


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


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)/../..)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.