2009-07-13 24 views

Respuesta

43

echo $JAVA_HOME imprimirá el valor si está configurado. Sin embargo, si no lo configuró manualmente en los scripts de inicio, probablemente no esté configurado.

Si prueba which java y no encuentra nada, Java puede no estar instalado en su máquina, o al menos no está en su camino. Según la distribución de Linux que tenga y si tiene o no acceso de root, puede ir al http://www.java.com para descargar la versión que necesita. Luego, puede configurar JAVA_HOME para que apunte a este directorio. Recuerde, esto es solo una convención y no debe usarse para determinar si java está instalado o no.

+3

JAVA_HOME ya no se define en los sistemas Linux y está en desuso. –

+1

@PeterQuiring debe citar su fuente para esa declaración ... usted está completamente equivocado. – harschware

+1

@harschware Cuando instalo Ubuntu, JAVA_HOME no está configurado, incluso con el JDK instalado. Lea también/usr/share/doc/openjdk-8-jre-headless/JAVA_HOME y dice que JAVA_HOME ya no es necesario (heredado). –

2

en el terminal, escriba:

echo "$ JAVA_HOME"

Si usted no está recibiendo nada, entonces su variable de entorno JAVA_HOME no se ha establecido. Puede intentar usar "locate java" para tratar de descubrir dónde se encuentra su instalación de Java.

2

¿Ha definido su JAVA_HOME

  • Korn y golpe conchas: export JAVA_HOME = JDK dir-instalación-
  • shell Bourne: JAVA_HOME = JDK dir-instalación-; export JAVA_HOME
  • shell C: setenv JAVA_HOME JDK dir-instalación-
+0

¿Falta un punto y coma allí? –

+0

fijo, gracias Tom –

29

sé que es tarde, pero este comando busca en el directorio/usr/directorio para encontrar java para que

sudo find /usr/ -name *jdk 

Resultados a

/usr/lib/jvm/java-6-openjdk 
/usr/lib/jvm/java-1.6.0-openjdk 

FYI, si usted está en un Mac, actualmente JAVA_HOME se encuentra en

/System/Library/Frameworks/JavaVM.framework/Home

+1

tenido que utilizar sudo find/-name * javac para encontrar el Oracle VM había instalado – bulltorious

+1

Es posible que desee para tratar de encontrar 'sudo/usr/-name * *' JDK ya que mi camino era '/ usr/lib/jvm/java-7-openjdk-amd64 /'. – JVE999

51

En Linux se puede ejecutar $(dirname $(dirname $(readlink -f $(which javac))))

En Mac puede ejecutar $(dirname $(readlink $(which javac)))/java_home

No estoy seguro acerca de las ventanas pero imagino where javac le conseguiría bastante cerca

+6

Esta es una gran solución, pero recuerde utilizar la marca canónica para readlink, ya que Java se puede configurar con múltiples enlaces, por lo tanto use '$ (dirname $ (dirname $ (readlink -f $ (which javac))))' en Linux en su lugar –

+0

Gracias @ MatthewO'Riordan! Agregué el indicador '-f' para el comando linux. Tenga en cuenta que 'readlink' en mac no es la versión' GNU', por lo que excluí '-f' para la versión mac del script. Los usuarios de Mac que tienen instalada la versión 'GNU' de' readlink' mediante brew pueden usar '-f'. – jsdevel

+0

Esto es particularmente bueno para las personas que usan/etc/alternatives para administrar diferentes versiones de Java. – gilbertpilz

8

Para mostrar el valor de una variable de entorno que utilice:

echo $ VARIABLE

por lo que en su caso será:

echo $ JAVA_HOME

En caso de que no lo tiene setted, se puede añadir en su .bashrc archivo:

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

y cambiará dinámicamente cuando actualice sus paquetes.

+0

funciona bien en Fedora y Ubuntu –

+0

comando inseguro: ¿Qué pasa si/usr/bin/java era un enlace simbólico a '/ usr/bin/java-8/bin/java'? Obtendrás la salida '/ usr/-8/bin/java'. – GKFX

+0

¡Solución fantástica! si quieres usar jdk como página principal en lugar de jre solo modifica readlink -f/usr/bin/java | sed "s: jre/bin/java ::" – cyberoblivion

7

Si $JAVA_HOME se define en su entorno ...

$ echo $JAVA_HOME 
$ # I am not lucky... 

Se puede adivinar que de las clases que se cargan.

$ java -showversion -verbose 2>&1 | head -1 
[Opened /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64/jre/lib/rt.jar] 

Este método asegura que encuentre la correcta jdk/jre utilizado en caso de que existan varias instalaciones.

O usando strace:

$ strace -e open java -showversion 2>&1 | grep -m1 /jre/ 
open("/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64/jre/bin/../lib/amd64/jli/tls/x86_64/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) 
11

Sólo otra solución, multiplataforma de este (utiliza java), y que apunta a la ubicación del JRE.

java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home' 

Salidas todos los ajustes actuales de java 's, y encuentra el llamado java.home.

+1

He investigado muchas maneras de encontrar JAVA_HOME y creo que este es uno de los mejores. Gracias por mencionarlo! – ricovox

+0

¡Me alegro de que haya sido útil! –

+1

Probablemente valga la pena mencionar que esto comenzó a funcionar con JDK1.7 (IIRC). Antes de eso, habría necesitado llamar a: 'jrunscript -e 'java.lang.System.out.println (java.lang.System.getProperty (" java.home "));' '. En ambos casos, para aspectos de 'multiplataforma', es recomendable anteponer un '/ usr/bin/env'. – Moreaki

1

Aquí es una mejora, tomando sólo el directorio de la salida estándar:

java -XshowSettings:properties -version 2>&1 \ 
    | sed '/^[[:space:]]*java\.home/!d;s/^[[:space:]]*java\.home[[:space:]]*=[[:space:]]*//' 
+0

Un poco más corto, aunque con tres tenedores en lugar de dos, es el siguiente: ': $ {JAVA_HOME: = $ (/ usr/bin/env java -XshowSettings: propiedades -versión 2> & 1 | grep" java.home "| cut -d "=" -f2)} ' – Moreaki

+0

Si se necesita exportar la ruta directamente:' export $ (/ usr/bin/env java -XshowSettings: properties -version 2> & 1 | grep "java.home" | sed -e 's/java.home/JAVA_HOME /; s/// g;') ' – Moreaki

Cuestiones relacionadas