O que devo definir na variável de ambiente JAVA_HOME no macOS X 10.6?

436

Muitos aplicativos Java que usam scripts de shell para configurar seu ambiente usam a JAVA_HOMEvariável de ambiente para iniciar a versão correta do Java, localizar JRE JARs e assim por diante.

No macOS X 10.6, os seguintes caminhos parecem válidos para essa variável

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

Alguns desses são links simbólicos para a VM atual real (conforme definido no painel Java Preference).

Mas qual deles deve ser usado - ou está correto usar algum deles?

Robert Christie
fonte

Respostas:

849

Acabei de definir JAVA_HOMEa saída desse comando, que deve fornecer o caminho Java especificado em suas preferências Java. Aqui está um trecho do meu .bashrcarquivo, que define esta variável:

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

Não tive problemas com essa técnica.

Ocasionalmente, tenho que alterar o valor de JAVA_HOMEpara uma versão anterior do Java. Por exemplo, um programa que estou mantendo requer o Java 5 de 32 bits no OS X; portanto, ao usar esse programa, defino JAVA_HOMEexecutando:

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

Para aqueles que não têm java_homeem seu caminho, adicione-o assim.

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

Referências :

mipadi
fonte
20
Mountain Lion também tem
sghill 13/08/2012
57
Ainda válido para Mavericks
Pascal
42
Ainda válido para Yosemite. ;)
Geoffrey Wiseman
42
O capitão. Verifica!
gattshjoty
11
Ainda é válido para o Mojave
Keuha 29/11
40

Além disso, é interessante definir seu PATH para refletir o JDK. Depois de adicionar JAVA_HOME (o que pode ser feito com o exemplo citado por 'mipadi'):

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

Adicione também em ~ / .profile:

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

PS: Para OSX, geralmente uso .profile no diretório HOME em vez de .bashrc

lucasarruda
fonte
Para o OSX executando o bash padrão, geralmente uso o bash .bash_profile- por que você usa o genérico .profile?
LeeGee
1
Como .profileé genérico, ele funcionará com shou bash, enquanto .bash_profileé exclusivo para bash. Além disso, isso isola as configurações de aplicativos que usam .bash_profile, como MacPorts. Mas você pode usar com segurança qualquer um dos dois. Veja mais sobre isso aqui
lucasarruda
1
- Para sua informação, o link que você forneceu confirma minha suspeita de que, sob o bash (ou seja, por padrão), o uso de .bash_profilesubstituições .profile.
LeeGee
@LeeGee yes, e faz isso porque .bash_profileé específico, enquanto .profilegenérico, para todas as shvariações.
Lucasarruda
1
Como o OS / X coloca um link javano seu, /usr/binnão deve ser necessário adicionar explicitamente $JAVA_HOMEao seu caminho.
Zac
20

Estou com o MAC OS X (Sierra) 10.12.2 .

I definir JAVA_HOME para o trabalho em Reagir nativo (por Aplicativos Android), seguindo os seguintes passos.

  • Abra o Terminal (Command + R, digite Terminal, pressione ENTER).

  • Adicione as seguintes linhas ao ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Agora execute o seguinte comando. source ~/.bash_profile

  • Você pode verificar o valor exato de JAVA_HOME digitando o seguinte comando. echo $JAVA_HOME

O valor (saída) retornado será algo como abaixo. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

É isso aí.

hygull
fonte
Isso é útil, obrigado. Mas acredito que você esqueceu de incluir a última etapa, que está configurando JAVA_HOME para o valor retornado em .bashrc / .bash_profile / .zshrc / etc. Por favor, corrija-me se estiver enganado.
TheProletariat 15/03/19
2
Não é necessário. No meu caso, $JAVA_HOMErefere $(/usr/libexec/java_home)- se e $(/usr/libexec/java_home) é referido internamente como /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homepelo sistema.
Hygull
1
Entendi. Foi exigido no meu caso. Obrigado.
The proletariado
13

Estou no Mac OS 10.6.8

A solução mais fácil funciona para mim é simplesmente colocar

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

Para testar se funciona, coloque

$ echo $JAVA_HOME

isto mostra

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

você também pode testar

$ which java
Rae
fonte
9

Eu costumo usar /Library/Java/Home. O funcionamento do painel de preferências deve estar atualizado com a sua versão preferida.

Clint
fonte
/ bin. e verifique se ele aponta para / Library / java e não / System / Library / .., pois esse pode estar desatualizado.
JRun
1
Isso não é mais preciso. No OS X 10.5 e posterior, use / usr / libexec / java_home para encontrar o caminho.
Kristopher Johnson
8

Isso acima não funciona mais no YOSEMITE para APLICAÇÕES GRÁFICAS! Como eclipse, ou qualquer coisa iniciada com o Spotlight. (.bash_profile, o launchd.conf funciona apenas para sessões de terminal.) Antes de iniciar o eclipse, basta abrir uma janela de terminal e emitir o seguinte comando:

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

(Com o seu caminho de instalação! Talvez funcione com $ (/ usr / libexec / java_home) em vez do caminho completo também.)

Veja o excelente artigo sobre a solução permanente aqui: Definir variáveis ​​de ambiente via launchd.conf não funciona mais no OS X Yosemite / El Capitan / macOS Sierra?

Pálossy László
fonte
2

Encontrei esta pilha para ajudar, eu estava tendo o mesmo problema e poderia corrigir:

Meu caminho java estava aqui:

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

e era necessário colocar no meu .bash_profile:

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

Espero ajuda

Shirow
fonte
2

Ignorando a configuração do Terminal desde que você mencionou os aplicativos, configuração permanente da variável de ambiente do sistema (funciona no macOS Sierra; também deve funcionar no El Capitan):

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

(isso configurará JAVA_HOME para o JDK 1.8 mais recente, é provável que você tenha passado por atualizações de servidor, por exemplo, javac 1.8.0_101, javac 1.8.0_131)
Obviamente, altere 1.8 para 1.7 ou 1.6 (realmente?) para atender às suas necessidades e ao seu sistema

ericn
fonte
1

Como outras respostas, a maneira correta de encontrar o diretório inicial do Java é usar /usr/libexec/java_home.

A documentação oficial para isso está nas Perguntas e respostas técnicas da Apple QA1170: Diretórios Java importantes no OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Kristopher Johnson
fonte
Esta é uma duplicata!
Franklin Yu
Penso que a inclusão do link para a documentação oficial da Apple não a torna redundante. Mas, se for, a ação correta é sinalizá-lo como um duplicado, não fazer um comentário.
22419 Kristopher Johnson
Fiz um comentário porque não consigo marcar uma resposta como duplicada. O estouro de pilha apenas permite que o usuário marque uma pergunta como duplicada (infelizmente). O link é útil, mas acho que um comentário para a resposta atual (ou apenas edite-o com o link, já que você já possui esse recurso) seria melhor, pois concentra todas as informações úteis em uma única resposta. Acredito que havia diretrizes em algum lugar em que o Stack Overflow prefere corrigir as respostas atuais do que escrever uma nova.
Franklin Yu
1

Para mim, o maven parece funcionar fora do .mavenrcarquivo:

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

Tenho certeza de que também aprendi no SO, mas não me lembro onde.

maksimov
fonte
1

Criar arquivo ~/.mavenrc

depois cole isso no arquivo

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

teste

mvn -v

KhaledMohamedP
fonte
Eu gosto dessa abordagem, porque ela permite alterar muito facilmente a versão Java no arquivo .mavenrc.
Spindizzy 27/10/19
1

É recomendável verificar o shell do terminal padrão antes de definir a variável de ambiente JAVA_HOME , através dos seguintes comandos:

$ echo $SHELL
/bin/bash

Se o seu terminal padrão é / bin / bash (Bash), você deve usar @hygull método

Se o seu terminal padrão for / bin / zsh (Z Shell), defina essas variáveis ​​de ambiente no arquivo ~ / .zshenv com o seguinte conteúdo:

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

Da mesma forma, qualquer outro tipo de terminal não mencionado acima, você deve definir a variável de ambiente em seu respectivo arquivo env do terminal.

Este método testou o trabalho no macOS Mojave versão 10.14.6 .

Jerry Chong
fonte
-1

Para usuários do Fish Shell, use algo como o seguinte: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Yichuan Wang
fonte