¿Dónde está JAVA_HOME en macOS Mojave (10.14) a Lion (10.7)?


559

Java es un paquete opcional en las últimas versiones de macOS.

Sin embargo, una vez instalado, parece que la variable de entorno JAVA_HOME no está configurada correctamente .



En Mac Sierra, tengo / Library / Java / JavaVirtualMachines que tiene jdk y System Preferences> Java, ¿qué diferencia hay entre estos 2?
vikramvi

pregunta diferente, gracias
Olivier Refalo

No subestimes las posibilidades de que tu instalación de Java no se haya completado correctamente. Si ninguna de las siguientes sugerencias excelentes parecen funcionar, intente [volver a instalar].
MarkHu

Respuestas:


1059

Con el paquete opcional Java u Oracle JDK instalado, agregar una de las siguientes líneas a su archivo ~ / .bash_profile establecerá la variable de entorno en consecuencia.

export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

Actualización: agregado el indicador -v basado en la respuesta de Jilles van Gurp .


1
Bueno saber. Tengo que decir que no estoy muy emocionado con la lista de características de Lion. No parece haber muchas mejoras en mi uso ...
prodigitalson

1
@Oliver: ewww :-) Eso es probablemente lo menos útil ... Siempre tengo varias ventanas abiertas y organizadas en la pantalla para poder ver varias cosas a la vez ... por lo general, un diseño diferente en cada espacio.
prodigitalson

11
Esto no funcionó para mí. /System/Library/Frameworks/JavaVM.framework/Home trabajado.
chaostheory

77
¡Funciona también en Maverick!
cbare

3
Para Java 11 y High Sierra, exporte JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z

112

/usr/libexec/java_homeno es un directorio sino un ejecutable. Produce el JAVA_HOME configurado actualmente y en realidad no lo cambia. Para eso está la aplicación de Preferencias de Java, que en mi caso parece rota y en realidad no cambia la JVM correctamente. Enumera la JVM 1.7, pero puedo alternar / alternar y arrastrar y soltar todo lo que quiero allí sin cambiar realmente la salida de /usr/libexec/java_home.

Incluso después de instalar 1.7.0 u6 desde Oracle en Lion y configurarlo como el predeterminado en las preferencias, todavía devolvió el apple 1.6 java a casa. La única solución que realmente funciona para mí es configurar JAVA_HOME manualmente:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

Al menos de esta manera, cuando se ejecuta desde la línea de comandos, usará 1.7. /usr/libexec/java_homeTodavía insiste en 1.6.

Actualización : Comprender Java desde la línea de comandos en OSX tiene una mejor explicación de cómo funciona esto.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

es la forma de hacerlo Tenga en cuenta que actualizar esto a 1.8 funciona bien.


blog.hgomez.net/2012/07 está roto, pero está corregido en la respuesta que ahora enlaza con web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/…
Matt C

export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
Leo Nguyen

83

Para mí, Mountain Lion 10.8.2, la solución más votada no funciona. Instalé jdk 1.7 a través de Oracle y maven desde homebrew.

Mi solución es del archivo hadoop-env.sh de hadoop que también instalé desde homebrew. Agrego la siguiente oración en ~ / .bash_profile, y funciona.

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

Esta solución también funciona para OS X Yosemite con Java 1.8 instalado desde Oracle.


1
Hubiera funcionado si hubiera instalado Java 6 de Apple. el punto aquí es que estás usando
Oracle

2
Esto me funciona muy bien en Mavricks, pero la ubicación del script java_home es diferente. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost

1
Traté de configurar maven en mac Yosemite, de esta manera, configurar JAVA_HOME funciona para mí.
Alocus

Funciona para mí en Sierra 10.12 y Java 8
Kanak Sony

41

Ninguna de las respuestas anteriores me ayudó. Supongo que todas las respuestas son para mayoresOS X

Para OS X Yosemite 10.10, siga estos pasos

Use su editor de texto favorito para abrir: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

Agregue la siguiente línea en el archivo y guárdelo (: seguido de "x" para vim):

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

Luego, en el terminal, escriba los siguientes dos comandos para ver la salida:

$ source ~/.bash_profile

$ echo $JAVA_HOME

En la segunda línea, está actualizando el contenido del .bash_profilearchivo.


Creo que obtuve tu pb - usas comillas en lugar de comillas inversas 'vs'
Olivier Refalo

No, estoy usando las comillas correctas, en su lugar intenté copiar y pegar, no funcionó. Actualicé mi respuesta porque funcionó para mí.
Giri

@ OlivierRefalo Puedo ver que has actualizado tu respuesta con comillas dobles ("). Pero incluso sin comillas, funciona.
Giri

Muchas gracias . Me funcionó en Yosemite 10.10
Vijay

2
Esta es la única solución, que realmente funciona. Agregar ruta por cualquier otra solución, se agregará de forma temporal, hasta que finalice el terminal y la ruta desaparezca. Para agregarse permanentemente, la ruta debe guardarse en el archivo .bash_profile. Mientras tanto, usé nano en lugar de vim, por simplicidad.
Nadeem Jamali

31

Actualización para Java 9 y algunos alias claros.

En .bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

Tenga en cuenta que para la última versión es 9y no 1.9.

Establecer Java activo:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

Algunos alias adicionales para cambiar entre las diferentes versiones:

alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'

Prueba en terminal:

% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

EDITAR: Actualización para Java 10

export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'

EDITAR: Actualización para Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'

29

Lo anterior no funcionó para mí con las herramientas EC2 de Amazon, porque se espera, bin/javaetc., debajo JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homefuncionó


¿Era león? ¿Recibió el paquete oficial de Java de Apple o Java6 / 7 de Oracle?
Olivier Refalo

Creo que fue el paquete Java de Apple.
Cawflands

1
@ AndrewH sí, encontré que lo mismo es cierto. Instalé el paquete Java de Apple y descubrí la ruta real de la biblioteca (por ejemplo, para establecer -vm en eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub

Gracias por la info. Tal vez soy demasiado simple, pero ¿por qué OS X hace que algo tan simple sea un completo desastre?
Kuberchaun

18

Para OS X puedes hacer:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`

Es de destacar que HFS + no distingue entre mayúsculas y minúsculas.
sufinawaz

14

En Mac OS X Lion, para configurar que visualgc se ejecute, utilicé:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

1
No entiendo tu propuesta: ¿en qué se diferencia eso de exportar JAVA_HOME = /usr/libexec/java_home ? el comando / usr / libexec / java_home devuelve /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier Refalo

Para visualgc / usr / libexec / java_home produce: El java.exe que se encuentra en: / usr / libexec / java_home no está en un directorio JDK. Establezca y exporte su variable de entorno JVMSTAT_JAVA_HOME para hacer referencia a un directorio que contenga el JDK Sun J2SE 1.5.0 (no un JRE) e intente nuevamente.
EGHM

13

Lo siguiente funcionó para mí. Estoy usando ZSH en OSX Yosemite con Java 8 instalado.

El siguiente comando /usr/libexec/java_homeemite la ruta al inicio de JDK:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

En su ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"

¿Cómo es eso diferente que la solución propuesta?
Olivier Refalo

No es diferente a la solución propuesta. Esta solución es específica para personas que usan ZSH, Java 8 y OSX Yosemite.
Hemanta

Se confirmó que funcionaba a las mil maravillas con Java 1.8 instalado en OSX Yosemite.
Ashoor

La solución general funciona bien para Java 8, zsh y Yosemite.
yaauie

10

Una forma mejor (más actualizable) es usar lo siguiente:

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

Esto debería funcionar con AWS también ya que se encuentra bindebajo de Inicio


1
tipo de desacuerdo con esa afirmación "más actualizable" / usr / libexec / java_home es un exe que devuelve una ruta, no una ruta fija. Además de depender de la versión de jvm que use, la ruta anterior no coincidirá
Olivier Refalo

10

Las nuevas JVM de Oracle como 1.7.0_21-b12 parecen instalarse aquí:

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


1
De hecho, y la /usr/libexec/java_homeherramienta devuelve un error para estas versiones de Java.
Joe Dyndale

1
Esta es la única respuesta que funciona para mí después de descargar v1.7 JRE
maxrossello

2
Esta es la ruta si instala el JRE. La mayoría de las respuestas y comentarios calificados son sobre el JDK. No es lo mismo
8Ninguno1

9

para macOS Mojave 10.14.1 y JAVA 11.0.1 configuré el perfil como

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

teclee esto en la terminal para confirmar:

$JAVA_HOME/bin/java -version

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

1
Trabaja en Catalina. Ty
TuGordoBello

5

Mi enfoque es:

.bashrc

export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME

# -- optional
# export PATH=$JAVA_HOME/bin:$PATH

Esto hace que sea muy fácil cambiar entre J6 y J7


@AdonisSMU, ¿encontraste una solución?
Luccas

3

Tuve que establecerlo explícitamente en la ruta exacta en mi Macbook air.

Pasos seguidos:

  1. intente echo $JAVA_HOME(si está configurado, mostrará la ruta), si no, intente buscarlo usandosudo find /usr/ -name *jdk
  2. Edite el Bash p con - sudo nano ~/.bash_profile
  3. Agregue la ruta exacta a JAVA Home (con la ruta del paso 2 anterior) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Guardar y Salir
  5. Verifique JAVA_Home usando - echo $JAVA_HOME

Estoy ejecutando MACOS MOJAVE - 10.14.2 (18C54) en un Macbook Air con JAVA 8


2

Para Mac OS X 10.9 instalé la última versión de JRE de Oracle y luego restablecí JAVA_HOME a /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.

Estoy seguro de que hay una mejor manera, pero me puso en marcha.

hughsmac: ~ hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home


1
En una nueva instalación de Mavericks, esta es la única solución que funcionó para mí. Tuve que señalar sqldeveloper a la casa jdk ubicada aquí (como lo sugiere este hilo para que funcione.)
Chris

2

OSX Yosemite, ZSH y Java SE Runtime Environment 8, tuve que:

$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

y en ~ / .zshrc cambia JAVA_HOME a export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"


1

Tengo el mismo problema después de actualizar mi Mac OS y lo siguiente funcionó para mí:

  1. cmd> vi ~ / .bash_profile

  2. Agregue / actualice la línea para JAVA_HOME: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home"

  3. cmd> source ~ / .bash_profile o abra una nueva terminal

Creo que la versión jdk puede diferir, así que solo usa la versión que tienes en / Library / Java / JavaVirtualMachines /


1

Si necesita tener varias versiones de JDK en Mac OS X (Yosemite), puede ser útil agregar algunas secuencias de comandos para el cambio automático entre ellas.

Lo que debe hacer es editar su ~ / .bash_profile y agregar lo siguiente:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
setjdk 1.7

Lo que hace el script es eliminar primero otras versiones de JDK en la RUTA para que no interfieran con nuestra nueva versión de JDK. Luego hace un uso inteligente de / usr / libexec / java_home, que es un comando que enumera las versiones instaladas de JDK. El argumento -v le dice a java_home que devuelva la ruta del JDK con la versión suministrada, por ejemplo 1.7. También actualizamos la RUTA para que apunte al directorio bin del directorio JAVA_HOME recién encontrado . Al final podemos simplemente ejecutar la función usando

setjdk 1.7

que selecciona la última versión instalada de JDK de la rama 1.7. Para seleccionar una versión específica, simplemente puede ejecutar

setjdk 1.7.0_51

en lugar. Ejecute / usr / libexec / java_home -V para obtener más detalles sobre cómo elegir versiones.

PD: no olvide obtener ~ / .bash_profile después de guardarlo.


1

Para Java 11 (JDK 11) se puede ubicar con el siguiente comando:

/usr/libexec/java_home -v 11

0

Esta respuesta está relacionada con Mountain Lion y no con Lion. Necesitaba hacer esto para las herramientas de línea de comandos de AWS. Según los documentos de AWS , la ejecución de which javadevoluciones /usr/bin/java.

Entonces, me puse JAVA_HOME=/usren mi .bashrc.

Aparentemente, /usr/bin/javaes un enlace simbólico al /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaque hace que todo funcione.

Actualizar

Como se menciona en el comentario a continuación, este JAVA_HOMEvalor no es una solución ideal cuando la JAVA_HOMEvariable de entorno debe ser utilizada por otras cosas que no sean las Herramientas de línea de comandos de AWS. Sin embargo, funciona bien para las herramientas de línea de comandos de AWS, como se indica en sus documentos.


el punto es que / usr no es un directorio correcto de JAVA_HOME. Está bien ubicar bin / java. Pero a veces los constructores (ant, make) usan JAVA_HOME para hacer referencia al compilador de javac en lib / tools.jar Su solución fallará para ellos
Olivier Refalo

Ah, gracias por la información. Tienes razón. Se actualizará la respuesta.
Anjan

0

Para Mac Yosemite,

JDK 1.7.0_xx está utilizando

$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home

¿Puede agregar más información para que esta respuesta sea útil?
Mika

0

Cualquier persona que use AUSKEY de la Oficina de Impuestos de Australia (ATO) debe desinstalar AUSKEY. Esto solucionó mis problemas JAVA_HOME.

Tampoco es necesario para los usuarios de MAC. Yah!


0

Estoy usando Fish Shell en High Sierra 10.13.4 e instalé Java a través de Brew.

No está configurado automáticamente, así que para configurarlo correctamente en mi sistema ejecuto:

set -U JAVA_HOME (/usr/libexec/java_home)

0

Simplemente configure java_home de la versión 1.8 jdk en el netbeans.confarchivo:

/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

línea de comentario:

netbeans_jdkhome="path/to/jdk"

y establecer la ruta a su 1.8 jdk, en mi caso:

netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

Este enfoque le permite tener varias versiones jdk en mac os


0

Para los usuarios de terminales Fish en Mac (creo que también está disponible en Linux), esto debería funcionar:

set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8       //or whichever version you want as default

-1

para usuarios de mac. Java 8 debería agregar

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Java 6:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

ref: http://qiita.com/seri_k/items/e978c1339ce51f13e297

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.