Cómo configurar JAVA_HOME en Linux para todos los usuarios

185

Soy nuevo en el sistema Linux y parece que hay demasiadas carpetas Java.

java -version me da:

  • versión de Java "1.7.0_55"
  • OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64-Bit Server VM (compilación 24.51-b03, modo mixto)

Cuando intento construir un proyecto Maven, recibo un error:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

¿Podría decirme qué archivos necesito modificar para usuarios root y no root y dónde se encuentra Java exactamente?

Bosco
fuente

Respuestas:

353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Anteponga sudo si inició sesión como usuario no privilegiado, es decir. sudo vim

  3. Presione 'i' para entrar en modo de inserción
  4. añadir:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. cerrar sesión e iniciar sesión nuevamente, reiniciar o usar source /etc/profilepara aplicar los cambios inmediatamente en su shell actual
Que Dave Guy
fuente
29
no olvide eliminar las comillas dobles y volver a crearlas desde su teclado, porque solo copiar y pegar puede crear problemas.
Sunil Kumar
12
@rbaleksandar del que dependen algunas aplicaciones JAVA_HOME, no hace daño configurarlo también.
raffian
2
IntelliJ es una aplicación de este tipo, y no una menor.
Pete
12
¡También debe ejecutar los source /etc/profilecambios para que entren en vigencia de inmediato!
Mohamed Taher Alrefaie
1
Esto me indicó la dirección correcta. En realidad, había un rancio /etc/profile.d/jdk.shflotando en mi sistema.
Hermann
109

Para todos los usuarios, recomendaría colocar la siguiente línea en /etc/profile

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

Esto se actualizará dinámicamente y funciona bien con el sistema de alternativas . Sin embargo, tenga en cuenta que la actualización solo tendrá lugar en un nuevo shell de inicio de sesión.

Eero Aaltonen
fuente
10
para cumplir con el uso simple de JRE (incluso sin cabeza) export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::") lugar, tenga en cuenta que yo uso solo java, nojavac
Roman Kruglov
@occulta Al menos Maven espera que JAVA_HOME apunte a un JDK y lo usa para ubicar el compilador de Java.
Eero Aaltonen
1
Vota por una readlinksolución compatible de actualización / actualización, incluso este es un hilo de 5 años. Solo recomiendo no editar / etc / profile, pero coloque su exportación dentro de un archivo personalizado, por ejemplo /etc/profile.d/java_environment.sh, tal vez tenga que chmod +x java_environment.shreiniciar.
ChristophS
Perfecto. Mejor que mi torpedirname solución . Si eres como yo y quieres entender lo que está sucediendo aquí, este es un simple reemplazo del texto coincidente de la entrada con una cadena vacía. El carácter "predeterminado" para los reemplazos es el /, pero siempre que sea coherente, puede reemplazarlo /con cualquier cosa. En este caso son dos puntos como los que usamos /para los separadores de ruta.
Ungeheuer
35

Puede usar / etc / profile o mejor un archivo como /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Debe recordar que este archivo solo se carga con nuevos shells de inicio de sesión. Entonces, después de bash -l o una nueva sesión de gnome y que no cambia con las nuevas versiones de Java.

flob
fuente
1
al menos en mi Linux (raspbian), / etc / profile será fuente, /etc/profile.d/*.shpor lo que su archivo debe llamarse jdk_home.shpara que se obtenga
Hilikus
Gracias @Hilikus :-) Lo cambié en consecuencia.
flob
2
Gracias. hice una mezcla de tu respuesta y la de @ Eero para lo mejor de ambos mundos;)
Hilikus
1
Esta es la mejor respuesta
Jacob
/etc/profile.d/jdk_home.shes la respuesta mucho más limpia, al menos para Ubuntu , ya /etc/profileestá agrupada con tanta lógica. No parece prudente agregarle más ...
Ng Sek Long
30

Ninguna de las otras respuestas fueron "pegando" para mí en RHEL 7, incluso la creación JAVA_HOMEy PATHdirectamente /etc/profileo ~/.bash_profileno funcionaría. Cada vez que intentaba comprobar si JAVA_HOMEestaba configurado, aparecía en blanco:

$ echo $JAVA_HOME
    (<-- no output)

Lo que tuve que hacer fue configurar un script en /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Inicialmente descuidé la primera línea (la #!/bin/sh ), y no funcionará sin ella.

Ahora funciona:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/
Kyle Falconer
fuente
Tuve la misma experiencia en RHEL 7. Eliminé las exportaciones del ~ / .bash_profile y utilicé este enfoque.
xpagesbeast
#! / bin / sh no es necesario en su jdk_home.sh. una vez que hayas realizado la configuración, asegúrate de cerrar sesión y volver a iniciar sesión
kuhajeyan
12

Es muy fácil establecer un camino en Linux. Haz lo siguiente:

Paso-1 Abra la terminal y escriba sudo gedit .bashrc

Paso-2 Te pedirá tu contraseña. Después de escribir la contraseña, se abrirá el archivo bash. Luego ve al final y escribe abajo

paso 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

paso-4 Luego guarda el archivo y sal del archivo

Lo anterior es para un solo usuario. Para todos los usuarios, debe seguir los pasos a continuación.

Paso 1 gedit /etc/profile

Paso 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Paso 3 export PATH=$PATH:$JAVA_HOME/bin

Espero que esto ayude. ¡Gracias!

PyDevSRS
fuente
2
esta respuesta lo establece solo para el usuario actual.
Manuel Manhart
Gracias @ickyrr
PyDevSRS
7

Haciendo lo que hace Oracle (como ex empleado de Sun no puedo acostumbrarme a eso)

ln -s latestJavaRelease / usr / java / default
Donde latestJavaRelease es la versión que desea utilizar

luego exporte JAVA_HOME = / usr / java / default

Steve S
fuente
6

La respuesta que se le da a las publicaciones anteriores es válida. Pero no hay una respuesta completa con respecto a:

  1. No se recomienda cambiar el perfil / etc / simplemente por la razón (como se indica en / etc / profile):
  • NO es una buena idea cambiar este archivo a menos que sepa lo que está haciendo. Es mucho mejor crear un script de shell custom.sh en /etc/profile.d/ para realizar cambios personalizados en su entorno, ya que esto evitará la necesidad de fusionarse en futuras actualizaciones. *
  1. Entonces, como se indicó anteriormente, cree el archivo /etc/profile.d/custom.sh para cambios personalizados.

  2. Ahora, para mantenerse siempre actualizado con las nuevas versiones de Java instaladas, nunca coloque la ruta absoluta, en su lugar use:

#if hacer jdk como java en casa

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

O

#Si hace que JRE sea el hogar de Java

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

  1. ¡Y recuerda tener #! / bin / bash en el archivo custom.sh
alok ailawadi
fuente
4

Copie la ruta del archivo bin que instaló

YOUR PATH

abra la terminal y edite el archivo de entorno escribiendo el siguiente comando,

sudo nano /etc/environment

En este archivo, agregue la siguiente línea (reemplazando YOUR_PATHpor la ruta recién copiada):

JAVA_HOME="YOUR_PATH"

Eso debería ser suficiente para establecer la variable de entorno. Ahora vuelva a cargar este archivo:

source /etc/environment

ahora pruébelo ejecutando:

echo $JAVA_HOME
VirangaMahesh
fuente
3
sesión actual terminal de efectos olny
Fatih Türker
@ FatihTürker Reinicia tu PC
Jack Giffin
Para mí usando jdk11, YOUR_PATH es/usr/lib/jvm/default-java/
Jack Giffin
2

En Linux agrego esta línea a mi ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
Emanuel Oliveira
fuente
2
Parece una respuesta potencialmente correcta, pero ¿podría explicar por qué funciona, es decir, qué hace y cuál es el problema del OP? Además, usted dice "en Linux", pero hay muchas distribuciones de Linux diferentes y puede que no funcione para todas ellas, agregue para qué distribución funciona.
Buurman
2

Paso 1: verifique la versión actual de Java "echo $ JAVA_HOME"

Paso 2 - vim / etc / profile

Paso 3: al final del archivo, encontrará export JAVA_HOME, necesitamos proporcionar la nueva ruta aquí, asegúrese de que no sea relativa.

Paso 4 - Guardar y salir: wq

Paso 5 - "source / etc / profile /", esto ejecutaría el cambio

Paso 6 - Nuevamente haz un echo $ JAVA_HOME - el cambio se habría reflejado.

swapnil shashank
fuente
2

1 ... Usando el atajo Ctlr+ Alt+T para abrir el terminal

2 ... Ejecute el siguiente comando:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Recomendado) Reinicie su VM / computadora. Puedes usarsource /etc/source si no desea reiniciar la computadora

4 ... Usando el atajo Ctlr+ Alt+T para abrir el terminal

5 ... Verificado JAVA_HOME entrega con

echo $JAVA_HOME

Copia de una línea del flob , crédito para ellos

Ng Sek Long
fuente
2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME
Dashrath Mundkar
fuente
1

Probablemente sea una buena idea obtener el perfil que edite para evitar tener que usar un inicio de sesión nuevo.

ya sea: fuente / etc / o. / etc /

¿Dónde está el perfil que editó?

Bryant Bernstein
fuente
1

Mientras estamos configurando JAVA_HOME, permítanme compartir algunos beneficios de configurar JAVA_HOME o cualquier otra variable de entorno:

1) Es fácil actualizar JDK sin afectar el inicio de su aplicación y el archivo de configuración que apunta a JAVA_HOME. solo necesita descargar una nueva versión y asegurarse de que su JAVA_HOME apunte a una nueva versión de Java. Este es el mejor beneficio de usar variables de entorno o enlaces.

2) La variable JAVA_HOME es corta y concisa en lugar de la ruta completa al directorio de instalación de JDK.

3) La variable JAVA_HOME es la independencia de la plataforma, es decir, si su script de inicio usa JAVA_HOME, puede ejecutarse en Windows y UNIX sin ninguna modificación, solo necesita configurar JAVA_HOME en el sistema operativo respectivo.

Leer más: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH

invitado
fuente
1

Este es un script muy simple para resolver el problema.

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

Y para probar:

echo $JAVA_HOME
Dylan Breugne
fuente
1

Publicar como respuesta, ya que no tengo el privilegio de comentar.

Punto a tener en cuenta : siga la respuesta aceptada publicada por "That Dave Guy".

Después de configurar las variables, asegúrese de configurar los permisos apropiados para el directorio de Java donde está instalado.

chmod -R 755 /usr/java
Van Peer
fuente
1

Todos los pasos operativos (encontrar java, directorio principal, editar archivo, ...) una solución

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Resultado:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Explicación:

1) Dividamos el comando completo en pedazos

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Encuentra la ruta de Java desde el comando de Java

# $(which java)
"/usr/bin/java"

3) Obtener ruta relativa de ruta simbólica

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Obtener la ruta principal de /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Obtener la ruta principal de /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
ahmet
fuente
0

Use SDKMAN sdkman.io para cambiar por cierto. tu sdk's

Establece el JAVA_HOME para ti.

Stefan Höltker
fuente
0

abra kafka-run-class.sh con sudo para escribir

puede encontrar kafka-run-class.sh en su carpeta kafka : kafka / bin / kafka-run-class.sh

verifica estas líneas

ingrese la descripción de la imagen aquí

Modifique la variable JAVA en la parte else para apuntar al ejecutable java en su java / bin. como JAVA = "$ JAVA_HOME / java"

Ashish Verma
fuente
0

En / etc / profile, si lo abres, sabrás que NO es recomendable escribir en ese archivo. En lugar de eso, haga un script de sus comandos (suponga que test.sh) vaya a la carpeta /etc/profile.d y coloque allí test.sh. Cada vez que reinicie la instancia, / etc / profile lo llamará automáticamente.

Noha
fuente
-1

Yo uso la linea:

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

a mi ~ / .profile para que use la base del directorio predeterminado de java al iniciar sesión. Esto es para bash.

darkhipo
fuente