¿Qué debo configurar la variable de entorno JAVA_HOME en macOS X 10.6?

436

Muchas aplicaciones Java que utilizan scripts de shell para configurar su entorno utilizan la JAVA_HOMEvariable de entorno para iniciar la versión correcta de Java, ubicar JAR JAR, etc.

En macOS X 10.6, las siguientes rutas parecen ser válidas para esta variable

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

Algunos de estos son enlaces simbólicos a la VM actual actual (como se define en el panel de preferencias de Java).

Pero, ¿cuál debería usarse, o está bien usar alguno de ellos?

Robert Christie
fuente

Respuestas:

849

Acabo de configurar JAVA_HOMEla salida de ese comando, que debería darle la ruta de Java especificada en sus preferencias de Java. Aquí hay un fragmento de mi .bashrcarchivo, que establece esta variable:

export JAVA_HOME=$(/usr/libexec/java_home)

No he tenido ningún problema con esa técnica.

De vez en cuando tengo que cambiar el valor de JAVA_HOMEuna versión anterior de Java. Por ejemplo, un programa que mantengo requiere Java 5 de 32 bits en OS X, así que cuando uso ese programa, configuro JAVA_HOMEejecutando:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

Para aquellos de ustedes que no tienen java_homeen su camino, agréguelo así.

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

referencias :

mipadi
fuente
20
Mountain Lion también lo tiene
sghill
57
Sigue siendo válido para Mavericks
Pascal
42
Sigue siendo válido para Yosemite. ;)
Geoffrey Wiseman
42
El capitan. ¡Cheque!
gattshjoty
11
Todavía válido para Mojave
Keuha
40

Además, es interesante configurar su RUTA para reflejar el JDK. Después de agregar JAVA_HOME (que se puede hacer con el ejemplo citado por 'mipadi'):

export JAVA_HOME=$(/usr/libexec/java_home)

Agregue también en ~ / .profile:

export PATH=${JAVA_HOME}/bin:$PATH

PD: para OSX, generalmente uso .profile en el directorio HOME en lugar de .bashrc

lucasarruda
fuente
Para OSX que ejecuta bash predeterminado, generalmente uso el bash .bash_profile, ¿por qué usas el genérico .profile?
LeeGee
1
Como .profilees genérico, funcionará con sho bash, mientras que .bash_profilees exclusivo de bash. Además, esto aísla la configuración de las aplicaciones que usan .bash_profile, como MacPorts. Pero puedes usar cualquiera de los dos de manera segura. Ver más sobre esto aquí
lucasarruda
1
- Para su información, el enlace que proporcionó confirma mi sospecha de que bajo bash (es decir, por defecto), el uso de .bash_profileanulaciones .profile.
LeeGee
@LeeGee sí, y lo hace porque .bash_profilees específico, mientras que .profilees genérico, para todas las shvariaciones.
lucasarruda
1
Dado que OS / X pone un enlace javaen su, /usr/binno debería ser necesario agregar explícitamente $JAVA_HOMEa su ruta.
Zac
20

Tengo MAC OS X (Sierra) 10.12.2 .

Configuré JAVA_HOME para que funcione en React Native (para aplicaciones de Android) siguiendo los siguientes pasos.

  • Abra la Terminal (Comando + R, escriba Terminal, presione ENTER).

  • Agregue las siguientes líneas a ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Ahora ejecuta el siguiente comando. source ~/.bash_profile

  • Puede verificar el valor exacto de JAVA_HOME escribiendo el siguiente comando. echo $JAVA_HOME

El valor (salida) devuelto será algo como a continuación. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Eso es.

Hullull
fuente
Esto es útil, gracias. Pero creo que no incluyó el último paso, que es configurar JAVA_HOME con el valor devuelto en .bashrc / .bash_profile / .zshrc / etc. Corríjame si me equivoco.
TheProletariat
2
No es requerido. En mi caso, $JAVA_HOMEhace referencia $(/usr/libexec/java_home)y $(/usr/libexec/java_home) es internamente referido /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homepor el Sistema.
Hullull
1
Entendido. Fue requerido en mi caso. Gracias.
TheProletariat
14

Estoy en Mac OS 10.6.8

La solución más fácil para mí es simplemente poner

$ export JAVA_HOME=$(/usr/libexec/java_home)

Para probar si funciona, coloque

$ echo $JAVA_HOME

muestra

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

también puedes probar

$ which java
Rae
fuente
9

Tiendo a usar /Library/Java/Home. La forma en que funciona el panel de preferencias debe estar actualizada con su versión preferida.

Clint
fuente
/ bin. y compruebe que apunta a / Library / java y no / System / Library / .. ya que puede estar desactualizado.
JRun
1
Esto ya no es exacto. En OS X 10.5 y posterior, use / usr / libexec / java_home para encontrar la ruta.
Kristopher Johnson
8

¡Lo anterior ya no funciona en YOSEMITE para APLICACIONES GRÁFICAS! Como eclipse, o cualquier cosa que comenzó con Spotlight. (.bash_profile, launchd.conf funciona solo para sesiones de terminal). Antes de comenzar el eclipse, simplemente abra una ventana de terminal y emita el siguiente comando:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(¡Con su ruta de instalación! Quizás funcione con $ (/ usr / libexec / java_home) en lugar de la ruta completa también.)

Vea el excelente artículo completo sobre la solución permanente aquí: ¿ Establecer variables de entorno a través de launchd.conf ya no funciona en OS X Yosemite / El Capitan / macOS Sierra?

Pálossy László
fuente
2

He encontrado esta pila para ayudar, estaba teniendo el mismo problema y podía solucionarlo:

Mi camino java estaba aquí:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

y fue necesario poner en mi .bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

Espero ayuda

Shirow
fuente
2

Omitiendo la configuración de Terminal desde que mencionó las aplicaciones, configuración variable de entorno del sistema permanente (funciona para macOS Sierra; también debería funcionar para El Capitan):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(esto establecerá JAVA_HOME en el último 1.8 JDK, es probable que haya pasado por varias actualizaciones, por ejemplo, javac 1.8.0_101, javac 1.8.0_131)
Por supuesto, cambie 1.8 a 1.7 o 1.6 (¿realmente?) para satisfacer sus necesidades y su sistema

ericn
fuente
1

Como señalan otras respuestas, la forma correcta de encontrar el directorio de inicio de Java es usar /usr/libexec/java_home.

La documentación oficial para esto se encuentra en las Preguntas y respuestas técnicas de Apple QA1170: Directorios importantes de Java en OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Kristopher Johnson
fuente
Este es un duplicado!
Franklin Yu
Creo que la inclusión del enlace a la documentación oficial de Apple hace que no sea redundante. Pero si es así, la acción correcta es marcarlo como Duplicado, no hacer un comentario.
Kristopher Johnson
Hice un comentario porque no puedo marcar una respuesta como un duplicado. Stack Overflow solo permite al usuario marcar una pregunta como un duplicado (desafortunadamente). El enlace es útil, pero creo que un comentario a la respuesta actual (o simplemente edítelo con el enlace ya que ya tiene la capacidad) sería mejor ya que concentra toda la información útil en una sola respuesta. Creo que hubo una guía en algún lugar que Stack Overflow prefiere arreglar las respuestas actuales en lugar de escribir una nueva.
Franklin Yu
1

Para mí, Maven parece funcionar fuera del .mavenrcarchivo:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

Estoy seguro de que también lo aprendí en SO, solo que no recuerdo dónde.

maksimov
fuente
1

Crea un archivo ~/.mavenrc

luego pegue esto en el archivo

export JAVA_HOME=$(/usr/libexec/java_home)

prueba

mvn -v

KhaledMohamedP
fuente
Me gusta este enfoque, porque me permite cambiar la versión de Java muy fácilmente dentro del archivo .mavenrc.
Spindizzy
1

Se recomienda verificar el shell de terminal predeterminado antes de establecer la variable de entorno JAVA_HOME , a través de los siguientes comandos:

$ echo $SHELL
/bin/bash

Si su terminal predeterminado es / bin / bash (Bash), entonces debe usar el método @hygull

Si su terminal predeterminado es / bin / zsh (Z Shell), debe configurar estas variables de entorno en el archivo ~ / .zshenv con los siguientes contenidos:

export JAVA_HOME="$(/usr/libexec/java_home)"

Del mismo modo, cualquier otro tipo de terminal no mencionado anteriormente, debe establecer la variable de entorno en su respectivo archivo env de terminal.

Este método probó funcionar en macOS Mojave Versión 10.14.6 .

Jerry Chong
fuente
-1

Para los usuarios de Fish Shell, use algo como lo siguiente: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Yichuan Wang
fuente