Onde está JAVA_HOME no macOS Mojave (10.14) e Lion (10.7)?


559

Java é um pacote opcional nas versões mais recentes do macOS.

No entanto, uma vez instalada, parece que a variável de ambiente JAVA_HOME não está configurada corretamente .



No Mac Sierra, eu tenho / Library / Java / JavaVirtualMachines que possui jdk e System Preferences> Java, o que há de diferente entre esses 2?
vikramvi

diferente questão, obrigado
Olivier Refalo

Não subestime as chances de sua instalação Java não ter sido concluída corretamente. Se nenhuma das excelentes sugestões abaixo parecer funcionar, tente [re] instalar!
MarkHu

Respostas:


1059

Com o pacote opcional Java ou o Oracle JDK instalado, adicionar uma das seguintes linhas ao seu arquivo ~ / .bash_profile configurará a variável de ambiente de acordo.

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)"

Atualização: sinalizador -v adicionado com base na resposta de Jilles van Gurp .


1
Bom saber. Devo dizer que não estou muito feliz com a lista de recursos do Lion. Há não parece muito lá no caminho de melhorias para o meu uso ...
prodigitalson

1
@ Oliver: ewww :-) Isso é provavelmente a coisa menos útil ... eu sempre tenho várias janelas abertas e organizadas na tela para que eu possa ver várias coisas ao mesmo tempo ... geralmente um layout diferente em todos os espaços.
Prodigitalson

11
isso não funcionou para mim. /System/Library/Frameworks/JavaVM.framework/Home trabalhou.
usar o seguinte comando

7
Também funciona no Maverick!
cbare

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

112

/usr/libexec/java_homenão é um diretório, mas um executável. Ele gera o JAVA_HOME atualmente configurado e, na verdade, não o altera. É para isso que serve o aplicativo Java Preferences, que, no meu caso, parece quebrado e não altera a JVM corretamente. Ele lista a JVM 1.7, mas eu posso alternar / desarmar, arrastar e soltar tudo o que quero lá, sem realmente alterar a saída de /usr/libexec/java_home.

Mesmo depois de instalar o 1.7.0 u6 do Oracle no Lion e defini-lo como padrão nas preferências, ele ainda retornou o apple 1.6 java para casa. A única correção que realmente funciona para mim é definir JAVA_HOME manualmente:

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

Pelo menos desta maneira, quando executado a partir da linha de comando, ele usará 1.7. /usr/libexec/java_homeainda insiste em 1.6.

Atualização : Noções básicas sobre Java a partir da linha de comando no OSX, há uma explicação melhor sobre como isso funciona.

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

é a maneira de fazer isso. Observe que atualizá-lo para 1.8 funciona perfeitamente.


blog.hgomez.net/2012/07 está quebrado, mas está corrigido na resposta que agora está vinculada a web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/…
Matt C

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

83

Para mim, o Mountain Lion 10.8.2, a solução mais votada não funciona. Eu instalei o jdk 1.7 via Oracle e o maven do homebrew.

Minha solução é do arquivo hadoop-env.sh do hadoop, que eu instalei também do homebrew. Eu adiciono a frase abaixo em ~ / .bash_profile, e funciona.

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

Esta solução também funciona para OS X Yosemite com Java 1.8 instalado da Oracle.


1
Teria funcionado se você tivesse instalado o java 6 da Apple. o ponto aqui é que você está usando o oracle java 7.
Olivier Refalo

2
Isso funciona muito bem para mim no Mavricks, mas a localização do script java_home é diferente. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Geada

1
Tentei configurar o maven no mac Yosemite, desta forma, para definir o JAVA_HOME funciona para mim.
Alocus

Obras para me sobre Sierra 10,12 e Java 8
Kanak Sony

41

Nenhuma das respostas acima me ajudou. Suponho que todas as respostas são para idososOS X

Para o OS X Yosemite 10.10, siga estas etapas

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

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

Adicione a seguinte linha no arquivo e salve-a (: seguida de "x" para vim):

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

Em seguida, no terminal, digite os dois comandos a seguir para ver a saída:

$ source ~/.bash_profile

$ echo $JAVA_HOME

Na segunda linha, você está atualizando o conteúdo do .bash_profilearquivo.


Eu acho que peguei o seu pb - você usa aspas em vez de aspas 'vs `
Olivier Refalo 16/06/2015

Não, estou usando as aspas corretas. Em vez disso, tentei copiar e colar, não funcionou. Atualizei minha resposta porque funcionou para mim.
Giri

. @OlivierRefalo eu posso ver que você atualizou sua resposta com aspas ( "), mas mesmo sem aspas, ele funciona.
Giri

Muito obrigado . Funcionou para mim em Yosemite 10.10
Vijay

2
Esta é a única solução, que realmente funciona. A adição de caminho por qualquer outra solução será adicionada temporariamente, até que você termine o terminal e o caminho desapareça. Para ser adicionado permanentemente, o caminho deve ser salvo no arquivo .bash_profile. Enquanto isso, usei o nano em vez do vim, pela simplicidade.
Nadeem Jamali #

31

Atualização para Java 9 e alguns aliases puros.

Em .bash_profile:

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

Observe que, para a versão mais recente, é 9e não 1.9.

Defina Java ativo:

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

Algum alias adicional para alternar entre as diferentes versões:

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'

Teste no 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)

EDIT: atualização 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'

EDIT: atualização 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

O exemplo acima não funcionou para mim com as ferramentas EC2 da Amazon, porque espera bin/javaetc. embaixo JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homefuncionou.


Foi leão? você conseguiu o pacote Java oficial da Apple ou o Java6 / 7 da Oracle?
precisa saber é o seguinte

Eu acredito que era o pacote Java da Apple.
Cawflands 02/02

1
@ AndrewH sim, eu achei o mesmo para ser verdade. Instalou o pacote Java da Apple e descobriu o caminho real da biblioteca (por exemplo, para definir -vm em eclipse.ini):
/System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar

Obrigado pela informação. Talvez eu seja muito simples, mas por que o OS X torna uma coisa tão simples uma bagunça completa?
Kuberchaun

18

Para o OS X, você pode:

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

É importante notar que o HFS + não diferencia maiúsculas de minúsculas.
sufinawaz

14

No Mac OS X Lion, para definir o visualgc para execução, usei:

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

1
Não recebi sua proposta: como isso é diferente da exportação JAVA_HOME = /usr/libexec/java_home ? o comando / usr / libexec / java_home retorna /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier Refalo

Para visualgc / usr / libexec / java_home: O java.exe encontrado em: / usr / libexec / java_home não está em um diretório JDK. Defina e exporte sua variável de ambiente JVMSTAT_JAVA_HOME para se referir a um diretório que contém o Sun J2SE 1.5.0 JDK (não um JRE) e tente novamente.
EGHM 02/02/12

13

O seguinte funcionou para mim. Estou usando o ZSH no OSX Yosemite com o Java 8 instalado.

O comando a seguir /usr/libexec/java_homeemite o caminho para a página inicial do JDK:

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

No seu ~/.zshrc,

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

Qual é a diferença da solução proposta?
Olivier Refalo

Não é diferente da solução proposta. Esta solução é específica para pessoas que usam ZSH, Java 8 e OSX Yosemite.
Hemanta 28/10

Confirmado o funcionamento como um encanto com o java 1.8 instalado no OSX Yosemite, parabéns.
Ashoor

A solução geral funciona bem para Java 8, zsh e Yosemite.
23617 yaauie

10

Uma maneira melhor (mais atualizável) é usar o seguinte:

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

Isso deve funcionar com a AWS também uma vez que tem bindebaixo Início


1
tipo de discordo dessa afirmação "mais atualizável" / usr / libexec / java_home é um exe que retorna um caminho, não um caminho fixo. Além de depender da versão da jvm que você usa, o caminho acima não coincide #
Olivier Refalo 11/10/12

10

JVMs Oracle mais recentes, como 1.7.0_21-b12, parecem instalar aqui:

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


1
De fato - e a /usr/libexec/java_homeferramenta retorna um erro para essas versões do Java.
Joe Dyndale

1
Esta é a única resposta trabalhando para mim depois de baixar v1.7 JRE
maxrossello

2
Este é o caminho se você instalar o JRE. A maioria das respostas e comentários classificados são sobre o JDK. Não é a mesma coisa.
8None1

9

para macOS Mojave 10.14.1 e JAVA 11.0.1, defino o perfil como

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

digite o terminal this 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
Trabalhos em Catalina. Ty
TuGordoBello

5

Minha abordagem é:

.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

Isso torna muito fácil alternar entre J6 e J7


@AdonisSMU você encontrou uma solução?
Luccas 29/10

3

Eu tive que defini-lo explicitamente para o caminho exato no meu ar Macbook.

Passos seguidos:

  1. tente echo $JAVA_HOME(se estiver definido, ele mostrará o caminho); caso contrário, tente procurá-lo usandosudo find /usr/ -name *jdk
  2. Edite o Bash p com - sudo nano ~/.bash_profile
  3. Adicione o caminho exato ao JAVA Home (com o caminho da etapa 2 acima) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Salvar e sair
  5. Verifique JAVA_Home usando - echo $JAVA_HOME

Estou executando o MACOS MOJAVE - 10.14.2 (18C54) em um Macbook Air com JAVA 8


2

No Mac OS X 10.9, instalei a versão mais recente do JRE a partir do Oracle e, em seguida, redefinii o JAVA_HOME para /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.

Tenho certeza de que há uma maneira melhor, mas me colocou em funcionamento.

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


1
Em uma nova instalação do Mavericks, esta é a única solução que funcionou para mim. Teve que ponto sqldeveloper para a casa jdk localizados aqui (como sugerido por esta discussão para obtê-lo a trabalhar.
chris

2

OSX Yosemite, ZSH e Java SE Runtime Environment 8, tive que:

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

e em ~ / .zshrc, mude JAVA_HOME para export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"


1

Obtive o mesmo problema após a atualização do meu Mac OS e o seguinte funcionou para mim:

  1. cmd> vi ~ / .bash_profile

  2. Adicione / atualize a linha para JAVA_HOME: export JAVA_HOME = "/ Biblioteca / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Conteúdo / Home"

  3. cmd> source ~ / .bash_profile ou abra um novo terminal

Eu acho que a versão do jdk pode ser diferente, então use a versão que você possui em / Library / Java / JavaVirtualMachines /


1

Se você precisar de várias versões do JDK no Mac OS X (Yosemite), pode ser útil adicionar alguns scripts para alternar automaticamente entre eles.

O que você faz é editar seu ~ / .bash_profile e adicionar o seguinte:

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

O que o script faz é primeiro remover outras versões do JDK no PATH para que elas não interfiram na nossa nova versão do JDK. Em seguida, faz um uso inteligente de / usr / libexec / java_home, que é um comando que lista as versões instaladas do JDK. O argumento -v diz ao java_home para retornar o caminho do JDK com a versão fornecida, por exemplo 1.7. Também atualizamos o PATH para apontar para o diretório bin do diretório JAVA_HOME recentemente encontrado . No final, podemos simplesmente executar a função usando

setjdk 1.7

que seleciona a versão mais recente do JDK instalada da ramificação 1.7. Para selecionar uma versão específica, você pode simplesmente executar

setjdk 1.7.0_51

em vez de. Execute / usr / libexec / java_home -V para obter mais detalhes sobre como escolher versões.

PS Não se esqueça de fonte ~ / .bash_profile depois de salvá-lo.


1

Para Java 11 (JDK 11), ele pode ser localizado com o seguinte comando:

/usr/libexec/java_home -v 11

0

Esta resposta está relacionada ao leão da montanha e não ao leão. Eu precisava fazer isso nas ferramentas de linha de comando da AWS. De acordo com os documentos da AWS , a execução which javaretorna /usr/bin/java.

Então, eu JAVA_HOME=/usrcoloquei no meu .bashrc.

Aparentemente, /usr/bin/javaé um link simbólico ao /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaqual faz tudo funcionar.

Atualizar

Conforme mencionado no comentário abaixo, esse JAVA_HOMEvalor não é uma solução ideal quando a JAVA_HOMEvariável de ambiente deve ser usada por outras coisas que não as Ferramentas de Linha de Comando da AWS. Porém, ele funciona bem para as Ferramentas de linha de comando da AWS, conforme indicado nos documentos.


o ponto é que / usr não é um diretório JAVA_HOME correto. Não há problema em localizar bin / java. Mas às vezes os construtores (ANT, make) uso JAVA_HOME para referenciar o javac compilador em lib / tools.jar A sua solução irá falhar para aqueles
Olivier Refalo

Ah, obrigado pela informação. Você está certo. Atualizará a resposta.
Anjan

0

Para Mac Yosemite,

O JDK 1.7.0_xx está usando

$ 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

Você pode adicionar mais informações para tornar esta resposta útil.
Mika

0

Qualquer pessoa que utilize o AUSKEY do Australian Tax Office (ATO) deve desinstalar o AUSKEY. Isso resolveu meus problemas com o JAVA_HOME.

Também não é mais necessário para usuários de MAC. Yah!


0

Estou usando o shell de peixe no High Sierra 10.13.4 e instalei o Java via Brew.

Não é configurado automaticamente, portanto, para configurá-lo corretamente no meu sistema, eu corro:

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

0

Basta definir java_home da versão 1.8 jdk no netbeans.confarquivo:

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

linha de comentário:

netbeans_jdkhome="path/to/jdk"

e defina o caminho para o seu 1,8 jdk, no meu caso:

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

Essa abordagem permite que você tenha várias versões do jdk no mac os


0

Para usuários do terminal Fish no Mac (acredito que também esteja disponível no Linux), isso deve 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 usuário de mac. java 8 deve adicionar

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.