Mac OS X e várias versões Java

333

Como posso instalar um java adicional no MacOS? Eu instalei o jdk8 e isso funciona bem. mas agora eu preciso de uma instalação do jdk7 para fins de desenvolvimento. Ao tentar instalar a versão antiga via arquivo DMG, recebo um aviso de que já existe uma versão mais recente do java instalada e o instalador fecha.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

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

Como instalar o jdk7 além deste?

Obrigado
Dakky

Dakkar
fonte

Respostas:

493

A maneira mais limpa de gerenciar várias versões java no Mac é usar Homebrew.

E dentro Homebrew, use:

  • homebrew-cask instalar as versões do java
  • jenv gerenciar as versões instaladas do java

Como visto em http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , estas são as etapas a seguir.

  1. instalar homebrew
  2. instalar homebrew jenv
  3. instalar homebrew-barril
  4. instale uma versão java específica usando o cask (consulte o parágrafo "versões homebrew-cask" abaixo)
  5. adicione esta versão ao jenv para gerenciá-lo
  6. verifique se a versão é gerenciada corretamente por jenv
  7. repita as etapas 4 a 6 para cada versão do java necessária

versões homebrew-cask

Adicione a homebrew/cask-versionstorneira ao homebrew usando:

brew tap homebrew/cask-versions

Então você pode olhar para todas as versões disponíveis:

brew search java

Em seguida, você pode instalar as versões que você gosta:

brew cask install java7
brew cask install java6

E adicione-os para serem gerenciados por jenv como de costume.

jenv add <javaVersionPathHere>

Eu acho que essa é a maneira mais limpa e simples de fazer isso.


Outra coisa importante a ser observada, conforme mencionado no JDK atual do Java OS Mac OS X 10.6.7, é confuso :

Para diferentes tipos de JDKs ou instalações, você terá caminhos diferentes

Você pode verificar os caminhos das versões instaladas usando /usr/libexec/java_home -V, consulte Como verifico se o Java JDK está instalado no Mac?

No Mac OS X Mavericks, encontrei o seguinte:

1) JRE interno padrão: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDKs baixados da Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDKs baixados do Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Recursos

Adrien Be
fonte
16
Seria bom mencionar que o homebrew-cask pode ser instalado com o comando em brew install caskroom/cask/brew-caskvez do brew install caskqual é um plug-in do Emacs.
Unnawut
7
Eu tive alguns problemas ao implementar esta solução, um dos quais foi com o jenvretorno do No such file or directory.erro. Este wiki ajudou a resolvê-lo para mim. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil
10
Eu acrescentaria que todas as instalações java estariam /Library/Java/JavaVirtualMachines/e, ao adicioná-las com jenv addvocê, adicione um caminho parecido com este /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Felicidades!
Nikolay Tsenkov
14
Em 23 de junho de 2017, eu corri, brew cask search java7mas o No Cask foi encontrado para "java7".
Mingliang Liu
4
@MingliangLIU yeah me too ... realmente é uma porcaria. Encontrei problemas sobre isso no Github, onde eles mencionaram algumas soluções, mas não consegui fazê-lo funcionar. Então acabei tendo que fazê-lo "da maneira manual" através das páginas da Web "Java versões da Apple, baixar e instalar". Em seguida, use /usr/libexec/java_home -Vpara verificar novamente os caminhos em que eles foram instalados.
Adrien Seja
304

Desinstale o jdk8, instale o jdk7 e reinstale o jdk8.

Minha abordagem para alternar entre eles (em .profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Então você pode simplesmente digitar java7ou java8em um terminal para alternar versões.

(editar: atualizado para adicionar aprimoramento do Dylans para Java 9)

Vegard
fonte
18
Até agora, esta é a melhor opção para mim. facilmente pode mudar para qualquer versão com apenas um simples comando "java8" ou "java7". Obrigado pela ajuda
MMHMasud
4
Ótimo ! :) E para outros como eu, você pode usar: ls / Library / Java / JavaVirtualMachines para ver quais versões estão disponíveis. Em seguida, você pode ativar diferentes versões do 1.8.x. E também é necessário adicionar exportação PATH = $ JAVA_HOME / bin: $ PATH
Nico
4
Obrigado por este. Eu só queria mencionar que consegui fazer isso instalando o jdk7 após o jdk8 (não é necessário desinstalar o jdk8).
Titus
6
Não sei por que perdi meu tempo com o jenv, pois isso simplesmente funciona e não desorganiza a inicialização do shell em 0,5s com o jenv init.
precisa saber é o seguinte
2
Se você está tentando fazer com que o java 9 funcione dessa maneira, o argumento da versão para java_home para java 9 deve ser simplesmente 9por exemploexport JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley
125

Para o macOS Sierra 420

Este guia foi elaborado de várias fontes (respostas acima e de outras postagens) e funciona perfeitamente.

0. Se você ainda não o fez, instale o homebrew.

Consulte https://brew.sh/

1. Instale o jenv

brew install jenv

2. Adicione jenv ao perfil do bash

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Adicione jenv ao seu caminho

export PATH="$HOME/.jenv/shims:$PATH"

4. Toque em "caskroom / versões"

FYI: "Tap" estende a lista de repositórios disponíveis do brew, que pode instalar, acima e além da lista padrão de repositórios disponíveis do brew.

brew tap caskroom/versions

5. Instale a versão mais recente do java

brew cask install java

6. Instale o java 6 (ou 7 ou 8, o que você precisar)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Talvez feche e reinicie o Terminal para ver novos vars ENV que foram configurados.

7. Revise as instalações

Toda a versão Java é instalada aqui: /Library/Java/JavaVirtualMachinesvamos dar uma olhada.

ls -la /Library/Java/JavaVirtualMachines

8. Adicione cada caminho ao jenv, um de cada vez.

Precisamos adicionar "/ Contents / Home" à pasta da versão. AVISO: Use os caminhos reais em sua máquina ... estes são apenas EXEMPLO s'

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Verifique se jenv registrou OK

jenv versions

10. Defina a versão java para usar (globalmente)

Onde XX corresponde a um dos itens na lista de versões acima.

jenv global XX

Verifique a versão java

java -version

Verificar versões jenv

Também deve indicar a versão atual sendo usada com um asterisco.

jenv versions

FEITO


Referência futura rápida

Para alterar versões java

... Veja a lista de versões java disponíveis

jenv versions

... então, onde XX corresponde a um item da lista acima

jenv global XX
prumo
fonte
1
Além disso, reinicie o seu terminal apósbrew cask install java*
squeeish
1
Explicação clara e ótima, passo a passo.
Ritesh Singh
1
Erro: O barril 'java8' está indisponível: Não existe nenhum barril com este nome.
Alexey Sh.
6
java8 / 9/10 não está mais disponível como barris. Tente o seguinte: "brew barrk install adoptopenjdk / openjdk / adoptopenjdk8"
supi
1
brew tap caskroom/versionsdeveria serbrew tap homebrew/cask-versions
Vyacheslav Cotruta 20/09/19
42

SDKMAN! é uma ótima ferramenta para usar várias versões de Java, Gradle, Groovy, Kotlin e outras ferramentas JVM no Mac OS. O documento de instalação e uso está claramente no site principal.

(Não tenho afiliação, apenas um usuário satisfeito).

Como exemplo de uso, se eu digitar o seguinte em uma janela do Terminal, há uma lista de versões disponíveis do Java SDK (editadas por questões de brevidade):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Aqui +indica que a versão está instalada. >indica qual versão está atualmente em uso. Para instalar uma versão:

$ sdk install java 7u141-zulu

Para usar uma versão nesta janela do Terminal:

$ sdk use java 9ea170
Michael Easter
fonte
O sdkman suporta versões começando com java 1.7. Se você estiver disposto a usar o java 1.6, esta solução pode não ser adequada para você.
Aykut Akıncı
O sdkman é ótimo, mas eles não suportam lançamentos específicos em uma versão. Por exemplo, o Datastax Dev Center funciona apenas com 1.8.0_151, mas não posso especificar isso com sdkman. Espero que eles adicionem mais versões.
Eduardo Dennis
Se você tiver uma versão local, eu acho que você pode instalá-lo em SDKMan - sdkman.io/usage#localversion (mas eu não tentei)
Michael Páscoa
6

Como encontrado neste site Então, vamos começar instalando o jEnv

  1. Execute isso no terminal

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Adicionar jEnv ao perfil do bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Quando você instala o jEnv pela primeira vez, não há nenhum JDK associado a ele.

    Por exemplo, eu acabei de instalar o JDK 8, mas o jEnv não sabe disso. Para verificar as versões Java no jEnv

    No momento, apenas encontrou a versão Java (jre) no sistema. O *mostra a versão selecionada no momento. Diferente do rvm e rbenv, o jEnv não pode instalar o JDK para você. Você precisa instalar o JDK manualmente no site da Oracle.

  4. Instale o JDK 6 no site da Apple. Isso instalará o Java no /System/Library/Java/JavaVirtualMachines/. A razão pela qual estamos instalando o Java 6 no site da Apple é que o SUN não criou o JDK 6 para MAC; portanto, a Apple criou / modificou sua própria versão de implantação.

  5. Da mesma forma, instale o JDK7 e o JDK8.

  6. Adicione JDKs ao jEnv.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Verifique as versões java instaladas usando o jenv

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Então agora temos 3 versões do Java em nosso sistema. Para definir uma versão padrão, use o comando

    jenv local <jenv version>

    Ex - eu queria que o Jdk 1.6 iniciasse o IntelliJ

    jenv local oracle64-1.6.0.65
  9. verifique a versão java

    versão-java http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

É isso aí. Agora temos várias versões do java e podemos alternar entre elas facilmente. O jEnv também possui alguns outros recursos, como wrappers para Gradle, Ant, Maven, etc., e a capacidade de definir opções da JVM global ou localmente. Confira a documentação para obter mais informações.

Dinesh Arora
fonte
5
Não coloque imagens dos seus comandos, isso torna difícil copiá-los / colá-los. Para destacar comandos, use os backticks "" "para uma única palavra ou comando curto, ou indente seu comando com 4 espaços em sua própria linha (ou múltiplos de 4 em listas).
Seki
1
Obrigado Seki. Eu estava lutando para postar imagens e passei muito tempo tentando formatar, mas não consegui acertar. Obrigado por compartilhar as informações dos backticks.
Dinesh Arora
4
Eu acho que você pode ter usado a mesma imagem quatro vezes.
Ellen Spertus
5

Acho esse gerenciador de versão Java chamado Jabba recentemente e o uso é muito semelhante aos gerenciadores de versão de outras linguagens como rvm (ruby), nvm (nó), pyenv (python) etc. Também é multiplataforma, então definitivamente pode ser usado em Mac.

Após a instalação, ele criará um diretório em ~ / .jabba para colocar todas as versões Java instaladas. Ele "suporta a instalação do Oracle JDK (padrão) / Server JRE, Zulu OpenJDK (desde 0.3.0), IBM SDK, Java Technology Edition (desde 0.6.0) e de URLs personalizadas.".

O uso básico está listado no Github. Um resumo rápido para começar:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
fonte
4

Estou usando o Mac OS X 10.9.5. É assim que gerencio vários JDK / JRE em minha máquina quando preciso de uma versão para executar o aplicativo A e usar outra versão para o aplicativo B.

Criei o script a seguir depois de obter ajuda online.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Coloquei o script acima no arquivo .profile. Basta abrir o terminal, digite vi .profile, acrescente o script com o trecho acima e salve-o. Depois que você digitar source .profile, isso executará seu script de perfil sem que você precise reiniciar o terminal. Agora digite: java -versionele deve mostrar 1.7 como sua versão atual. Se você pretende alterá-lo para 1,8, comente a linha setjdk jdk1.7.0_15.jdke descomente a linha setjdk jdk1.8.0_60.jdk. Salve o script e execute-o novamente com o comando source. Eu uso esse mecanismo para gerenciar várias versões do JDK / JRE quando preciso compilar 2 projetos Maven diferentes que precisam de versões java diferentes.

ChaitanyaBhatt
fonte
3

Jenv no Mac Sierra:

se não estiver funcionando após a instalação, execute esta correção de bug para adicionar o executável java ao caminho

export PATH="$HOME/.jenv/shims:$PATH"

mesmo que eval "$(jenv init -)"pudesse fazer esse trabalho. O motivo é que a pasta / bin não existe mais, conforme descrito em sua página inicial, mas a pasta shim é usada como / bin.

  • Verifique se ~ / .jenv está lá
  • which java pode imprimir / Biblioteca / ...
  • jenv global 1.8
  • jenv shell 1.8

Eventualmente, which javafornece:

/Users/xxxx/.jenv/shims/java

CodeFarmer
fonte
3

No mesmo espírito que o @Vegard (leve):

  • Instale os JDKs desejados com o Homebrew
  • Coloque esta jdkfunção bash e um padrão no seu.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • e então, para mudar seu jdk, você pode fazer

     jdk 9
     jdk 11
     jdk 13

Com base em https://github.com/AdoptOpenJDK/homebrew-openjdk .

hulius
fonte
0

Aqui está uma versão mais SECA para o bash (com base na resposta de Vegard)

Substitua 1.7 e 1.8 pelas versões que lhe interessam e você obterá um apelido chamado 'javaX'; onde 'X' é a versão java (7/8 no snippet abaixo) que permite alternar facilmente versões

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
fonte
0

Para instalar versões mais recentes do OpenJDK, eu uso isso. Exemplo para o OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

Consulte https://github.com/AdoptOpenJDK/homebrew-openjdk para obter informações atuais.

Matthias Bohlen
fonte