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