Como você pode alterar a versão padrão do Java em um mac?
Como você pode alterar a versão padrão do Java em um mac?
Respostas:
Primeira execução, /usr/libexec/java_home -V
que produzirá algo como o seguinte:
Matching Java Virtual Machines (3):
1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
Escolha a versão que você deseja que seja o padrão ( 1.6.0_65-b14-462
por razões de argumentos) e depois:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
ou você pode especificar apenas a versão principal, como:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Agora, quando você executar, java -version
você verá:
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
Adicione a export JAVA_HOME…
linha ao arquivo init do seu shell.
Para o Bash (conforme declarado por antonyh ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Para peixes (como declarado por ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
linha
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- observe também, java_home permite correspondências parciais para que você não precise incluir a versão completa, pois ela encontrará as últimas instaladas. Isso facilita as atualizações.
Esta resposta é uma tentativa de abordar: como controlar a versão java em todo o sistema (não apenas no shell atualmente em execução) quando várias versões do JDK são instaladas para fins de desenvolvimento no macOS El Capitan ou mais recente (Sierra, High Sierra, Mojave) . Até onde eu sei, nenhuma das respostas atuais faz isso (*).
Como desenvolvedor, uso vários JDKs e quero alternar de um para outro facilmente. Normalmente, tenho o último estável para uso geral e outros para testes. Mas não quero que o sistema (por exemplo, quando inicio meu IDE) use a versão mais recente de "acesso antecipado" que tenho por enquanto. Eu quero controlar o padrão do sistema, e isso deve ser o mais recente estável.
A abordagem a seguir funciona com Java 7 a 12 pelo menos (acesso antecipado no momento da redação deste documento), com Oracle JDK ou OpenJDK (incluindo compilações do AdoptOpenJDK produzidas após meados de outubro de 2018 ).
/Library/Java/JavaVirtualMachines
. O sistema escolherá a versão mais alta por padrão. Contents/Info.plist
paraInfo.plist.disabled
. Esse JDK ainda pode ser usado quando $JAVA_HOME
aponta para ele, ou explicitamente referenciado em um script ou configuração. Ele será simplesmente ignorado pelosjava
comando .O iniciador do sistema usará o JDK com a versão mais alta entre aqueles que possuem um Info.plist
arquivo.
Ao trabalhar em um shell com JDK alternativo, escolha seu método entre as respostas existentes (jenv
ou aliases / scripts personalizados /usr/libexec/java_home
, etc).
Detalhes da investigação nesta essência .
(*) As respostas atuais são obsoletas (não são mais válidas para o macOS El Capitan ou Sierra) ou tratam apenas de um único JDK ou não tratam do aspecto de todo o sistema. Muitos explicam como mudar $JAVA_HOME
, mas isso afeta apenas o shell atual e o que é iniciado a partir daí. Não afetará um aplicativo iniciado no iniciador do sistema operacional (a menos que você altere o arquivo correto e faça logout / login, o que é entediante). O mesmo para jenv, é legal e tudo, mas, tanto quanto posso dizer, apenas altera as variáveis de ambiente, por isso tem a mesma limitação.
jenv
nem JAVA_HOME
é capaz de definir a versão java em todo o sistema, ou seja, a que o Eclipse usaria.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
. Aparentemente, é esse o novo painel de Preferências que será iniciado - esta é a única exceção que encontrei na minha solução: essa O thingy ainda usará o JDK9 (o mais recente que eu instalei), mas nenhum outro aplicativo Java usa. "
Adicionando as respostas acima, coloquei as seguintes linhas no meu .bash_profile
(ou .zshrc
no MacOS 10.15+), o que torna muito conveniente alternar (incluindo o comentário de @ elektromin para o java 9):
alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"
Após a inserção, execute $ source .bash_profile
Eu posso mudar para o Java 8 digitando o seguinte:
$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"
e, em seguida, digitação j10
permite que você alterne de volta para a versão atual do Java (no meu caso Java 10)
nvm
de comutação versões do Java, mas a sigla jvm
já significa algo mais :)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Uma pequena função fish baseada em / usr / libexec / java_home
function jhome
set JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
Se você não usa peixe, pode fazer algo semelhante no bash:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Para alternar entre javas, faça:
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
export JAVA_HOME=(/usr/libexec/java_home $argv)
vez da segunda linha da sua jhome
função.
É um pouco complicado, mas tente seguir as etapas descritas em Instalando o Java no OS X 10.9 (Mavericks) . Basicamente, você precisará atualizar seu alias para java
.
Passo a passo:
Depois de instalar o JDK 1.7, você precisará fazer isso sudo ln -snf
para alterar o link para atual java
. Para fazer isso, abra o Terminal e execute o comando:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Observe que o diretório jdk1.7.0_51.jdk
pode mudar dependendo da versão do SDK que você instalou.
Agora, você precisa definir JAVA_HOME
para apontar para onde jdk_1.7.0_xx.jdk
foi instalado. Abra novamente o terminal e digite:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
Você pode adicionar a export JAVA_HOME
linha acima no seu .bashrc
arquivo para ter o java permanentemente no seu Terminal
JAVA_HOME
será exportada na sessão atual do Terminal. Você pode adicioná-lo ao nosso, .bashrc
se quiser. Vou adaptar os comandos para a última versão.
Usar jenv é uma maneira fácil.
1.Instale o jenv
enrolar -s get.jenv.io | bater
2.Config jenv
cd ~ / .jenv / candidatos / mkdir java cd java mkdir 1.7 mkdir 1.8
3.Ligue o caminho do jdk
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~ / .jenv / candidatos / java / 1.7 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / candidatos / java / 1.8
4.Você está pronto
comando switch:
jenv use java 1.8
conjunto padrão:
jenv java padrão 1.7
instale o JDK, não apenas o JRE
/usr/libexec/java_home -v 1.8
dá
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
Próximo
touch .bash_profile
open -a TextEdit.app .bash_profile
O TextEdit mostrará uma página em branco que você pode preencher.
adicionar ao documento:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
no terminal:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
tente o comando:
javac -version
deve produzir:
javac 1.8.0_111
tl; dr
Adicione a linha:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
para o arquivo
~/.bash_profile
(substitua jdk1.8.0_144.jdk pela sua versão baixada)
então source ~/.bash_profile
Use jenv, é como um gerenciador de ambiente Java. É super fácil de usar e limpar
Para Mac, siga as etapas:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Instalação: se você estiver usando o bash, siga estas etapas:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
Adicione versões desejadas da JVM ao jenv:
jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
Verifique as versões instaladas:
jenv versions
Defina a versão do Java que você deseja usar:
jenv global oracle64-1.6.0
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
}
colocar isso no seu ~ / .profile e usá-lo em seu terminal como assim setjdk 1.8
, setjdk 1.7
,setjdk 9
etc etc ...
Se você não possui removeFromPath
, é:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Quatro etapas fáceis usando o terminal para pessoas que usam o processo padrão .. :)
echo $JAVA_HOME
dá-lhe atual java home. Por exemplo:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
levará você para a pasta em que você normalmente instala o jdks (pode ser diferente para suas máquinas)
ls
mostra as pastas disponíveis (normalmente ele terá os números da versão, por exemplo: jdk1.8.0_191.jdk openjdk-11.0.2.jdk
:)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
vai mudar a casa do java ..O macOS El Capitan ou mais recente escolherá a versão mais alta do JDK disponível no site /Library/Java/JavaVirtualMachines
. Portanto, para fazer o downgrade, você pode renomear o arquivo Info.plist
para outra coisa, Info.plist.disabled
para que o sistema operacional escolha uma versão anterior.
Na página do manual oficial java_home (1) da Apple :
**USAGE**
/usr/libexec/java_home helps users set a $JAVA_HOME in their login rc files, or provides a way for
command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
tecture requirement. The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
which is useful for starting Java command-line tools from launchd plists without hardcoding the full
path to the Java command-line tool.
Usage for bash-style shells:
$ export JAVA_HOME=`/usr/libexec/java_home`
Usage for csh-style shells:
% setenv JAVA_HOME `/usr/libexec/java_home`
Se você ainda não conseguir defini-lo. usando este comando.
exportar JAVA_HOME =/usr/libexec/java_home -v 1.8
então você tem que usar este.
exportar JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
certamente funcionará.
Primeiro descubra onde você armazena as variáveis de ambiente -
Etapas para configurar a variável de ambiente: -
Agora configure variáveis de ambiente no seu arquivo
uma. Para emacs.profile, você pode usar este link OU ver a captura de tela abaixo
b. Para configuração do perfil ZSH -
1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
2. source ~/.zshrc - Restart zshrc to reflect the changes.
3. echo $JAVA_HOME - make sure path is set up properly
----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
4. java -version
--> java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
Tudo pronto Agora você pode atualizar ou degradar facilmente a versão JAVA.
Adaptei a resposta do @Alex acima e escrevi o seguinte para corrigir o código do Java 9.
$ cat ~/.jdk
#!/bin/bash
#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching java version $1";
requestedVersion=$1
oldStyleVersion=8
# Set the version
if [ $requestedVersion -gt $oldStyleVersion ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v $1);
else
export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
fi
echo "Setting JAVA_HOME=$JAVA_HOME"
which java
java -version;
}
$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
Você pode adicioná-lo ao seu .bash_profile para que a versão seja definida por padrão.
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Se você estiver usando peixe e usando mac e quiser alternar entre JDKs, então abaixo funciona para mim no mac.
A resposta do @ kenglxn não funcionou para mim e eu descobri que o bcos não definiu -g, que é global!
Coloque abaixo em ~ / .config / fish / config.fish
alias j8="jhome -v 1.8.0_162"
alias j9="jhome -v 9.0.1"
function jhome
set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
funcsave jhome
Para saber qual versão / versão secundária você instalou, você pode:
/usr/libexec/java_home -V 579ms Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
Se você possui várias versões e deseja executar algo usando uma versão específica, use este exemplo:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
Com base na resposta @markhellewell, criei algumas funções de alias que farão isso por você. Basta adicioná-los ao seu arquivo de inicialização do shell
#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching java version";
export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
java -version;
}
https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4
Aqui está como eu faço no meu Linux (Ubuntu / Mint mate) , acho que o Mac pode fazer o mesmo.
Passos:
/mnt/star/program/java/jdk-1.8
ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
/mnt/star/program/java/java
é o link suave.JAVA_HOME
em um script inicial. /etc/profile.d/eric.sh
, ou apenas usar ~/.bashrc
. JAVA_HOME=/mnt/star/program/java/java
java -version
deve imprimir a versão java./mnt/star/program/java/jdk-11
~/.bashrc
, defina a variável para várias versões do Java. _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
_E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
# dir of default version,
_E_JAVA_HOME_D=$_E_JAVA_HOME_8
~/.bashrc
, defina o comando para alternar a versão Java. ## switch java version,
alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
# default java version,
alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
alias jv="java -version"
source ~/.bashrc
para fazer as alterações entrarem em vigor.Comandos:
jv11
jv8
jvd
_E_JAVA_HOME_D
definidos acima.jv
Exemplo de saída:
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
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)
eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$
JAVA_HOME
.Na minha máquina, quando instalo o jdk manualmente, mantenho a versão secundária e, em seguida, faço um link direto com a versão principal, mas sem a versão secundária.
por exemplo,
// este é o diretório real,
jdk1.8.0_191
// este é um link para jdk1.8.0_191
jdk-8
// este é um link para jdk-8
oujdk-11
java
Eu defino o alias de comando em ~/.bashrc
, mas defino a variável em um arquivo separado.
Estou usando ~/.eric_var
para definir as variáveis e ~/.bashrc
a fonte (por exemplo source $HOME/.eric_var
).
Uma maneira fácil de incluir um JDK instalado separadamente na lista fornecida por /usr/libexec/java_home -V
é vincular o diretório da seguinte maneira:
sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Por exemplo, para registrar o JDK incluído no Android Studio (1.8.0_152 no momento da escrita), use:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
Agora java_home
listará o JDK em Matching Java Virtual Machines
e você pode selecioná-lo como descrito acima.
Eu fiz isso para o terminal local com
export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
export JAVA_HOME=$JAVA_13_HOME
Esta ferramenta fará o trabalho para você:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
É um JavaOne simples que pode ser usado para definir a versão Java atual. A versão pode ser usada em um shell que é aberto após a seleção de uma versão na ferramenta.
SOLUÇÃO MUITO FÁCIL: Que dor de cabeça - essa foi uma solução rápida e fácil que funcionou para mim.
Mac OS Sierra versão 10.12.13
Use as teclas de atalho: CMD + SHIFT + G - digite "/ Library /"
Encontre a pasta JAVA
Clique com o botão direito do mouse na pasta Java = Mover para a lixeira (senha necessária)
Instalação: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Faça o download do Javascript SDK
/usr/libexec/java_home
lhe diz?