¿Una forma de configurar u obtener $ JAVA_HOME en todo el sistema en Ubuntu?


8

Me pregunto si Ubuntu en sí mismo proporciona una manera de todo el sistema para encontrar el actual JAVA_HOMEo si hay un lugar adecuado para la configuración JAVA_HOME.

Mac OS X funciona bien en esto, ya que el /usr/libexec/java_homecomando devuelve el actual JAVA_HOME. Pero para Ubuntu, los materiales que encontré siempre me dijeron que establezca el $JAVA_PATHapuntar a una ruta estática, que se almacena en ~/.bash_profile.

Sin embargo, creo que este enfoque tiene varios inconvenientes:

  1. Una vez que Java se actualice, el número de versión mini cambiará, lo que hace que la ruta estática ya no esté disponible.
  2. Después de cambiar el JRE utilizado en mi sistema con update-alternatives, tengo que modificar $JAVA_HOMEen .bash_profile. Ese trabajo extra es molesto.
  3. Algunos $JAVA_HOMEprogramas requeridos no son conscientes de .bash_profilenada. Tengo que configurar $JAVA_HOMEsu script de inicio, por lo tanto, una forma estándar y fácil de obtener me $JAVA_HOMEparece crítica.

Bueno, cualquier consejo es bienvenido. Gracias.

Respuestas:


6

Un poco hacky, pero ponga esta línea en su /etc/profilepara configurarlo en todo el sistema:

export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/javac)))

A algunos administradores de sistemas les gusta jugar con la RUTA, por lo que / usr / bin no es necesariamente el primer lugar buscado. Para estar seguro de que está siguiendo el camino de la versión que realmente ejecutará, un mejor hack puede ser: export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
SimonB

Esto funciona si la ruta existe. ¿Hay alguna manera de silenciarlo en sistemas que no tienen Java?
greggles

¿Cómo hacer esto en Mac? "readlink -e" no funciona.
Artanis Zeratul

1

Puede establecer variables de entorno en /etc/environment, que se configura mediante PAM. También debe haber enlaces simbólicos en los /usr/lib/jvmque no cambien con lanzamientos menores.

JAVA_HOME=/usr/lib/jvm/java-6-sun

0

Establecer perfil del sistema de ruta

Edite el archivo de ruta del sistema / etc / profile

sudo gedit /etc/profile

Agregue las siguientes líneas al final

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

Para http://javaandme.com/ para la guía de instalación completa.


0

Si está seguro de que se puede llamar al comando 'java', ¿no funcionaría para usted?

export JAVA_HOME=$(dirname $(java -XshowSettings:properties -version 2>&1 | grep 'java\.home' | awk '{ print $3 }'))

El OP está buscando una manera de establecer todo el $JAVA_HOMEsistema, no solo en el shell actual.
Celada

0

La solución aceptada por el usuario 13742 supone que el servidor definitivamente tiene Java instalado. En caso de que esté agregando esto a un script centralizado para muchos servidores, dará algunos errores como:

dirname: missing operand
Try 'dirname --help' for more information.

Para evitar eso y solo establecer JAVA_HOME si el servidor tiene un entorno Java, una pequeña mejora es:

if [ -f "$(which javac)" ]; then
    export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
fi

También incorporé el cambio de SimonB para usar whichpara encontrar dónde está la instalación.


¿Puedo poner esto /etc/environment?
Jin Kwon
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.