Alternando entre Java 7 e 8 no OS X


25

Eu instalei o Java-8. Agora eu queria voltar ao Java-7 por padrão, então digito ...

/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version

Mas ainda vejo ...

java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)

Isso funciona ...

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

Mas eu gostaria de uma solução mais permanente.

Alguém viu o que estou fazendo de errado?

Respostas:


50

Alterne facilmente versões

  1. Instale as versões 1.6, 1.7, 1.8 em qualquer ordem. Nota: acredito que o último instalado determina qual deles será usado para os plugins do navegador. Não vou me preocupar em alterar os itens abaixo.

  2. Em seguida, adicione ao seu ~/.bashrcou ~/.bash_profile, ou onde quer que seja:

    #!/bin/bash
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
    
    setjdk() {
       export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    }
    
  3. Verifique a alteração via java -version

    $ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    
    $ setjdk 1.6
    $ java -version
    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)
    
    $ setjdk 1.8
    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
    

Obviamente, a mudança é apenas para a duração do shell. Mas você pode ver onde você pode configurá-lo globalmente agora.


2
Um problema: o JDK7 se recusa a instalar se você já possui o JDK8. Ele indica um URL no oracle.com para obter mais informações que oferecem um 404. E, é claro, as instruções de desinstalação do JDK8 não funcionam, então agora estou basicamente perdido.
22714 Eric

1
apenas use jenv jenv.be
madzohan

9

Você pode usar o jEnv ( http://www.jenv.be/ ), que é "uma ferramenta de linha de comando para ajudá-lo a esquecer como definir a variável de ambiente JAVA_HOME para alternar entre diferentes versões do JDK" (retirada da página inicial do projeto )

Se você conhece o Ruby, o JEnv é como usar o RVM ou o rbenv. Ele ajuda a lidar com vários JDKs diferentes instalados em sua máquina sem precisar escrever seu próprio script para alternar de um JDK para outro. Você pode alterar a versão java atual com base, por exemplo, no diretório atual ou em um arquivo de configuração.


Você pode expandir isso? Parece um comentário, não uma resposta.
Austin T French

Se você conhece o Ruby, é como usar o RVM ou o rbenv para alterar a versão atual do java com base, por exemplo, no diretório atual ou em um arquivo de configuração. Se você for para a página inicial da JENV, há um bom tutorial.
Pietro Di Bello

Esta postagem deve ser para todos que procuram respostas, portanto, espera-se que mais detalhes na publicação sejam considerados uma resposta completa e boa.
Austin T French

Adicionei mais informações e ampliei um pouco a resposta ... espero que isso pareça melhor agora. Obrigado pelo feedback.
Pietro Di Bello

4

Você não pode alternar entre versões Java. Na documentação, você vê:

Somente um JRE pode ser instalado por vez. O sistema não instalará um JRE que tenha uma versão inferior à versão atual. Se você deseja instalar uma versão inferior do JRE, primeiro desinstale a versão atual.

Se você quiser voltar para uma versão mais antiga, precisará desinstalar o Java 8.


grrr obrigado, mas isso não ajuda minha opinião sobre o OSX.
Jackie

4
@ Jackie: Na verdade, isso tem pouco a ver com o OS X, mas mais com o Oracle. Quando a Apple mantinha o JDK para OS X, era perfeito e fácil alternar entre as versões Java ativas. Por favor culpar Oracle para o seu instalador de baixa qualidade e não OS X.
Alessandro Vermeulen

@AlessandroVermeulen com todo o respeito, não é o "instalador", gostaria que não viesse com uma versão pré-instalada como as minhas caixas de linux. Então eu poderia "instalá-lo" como quisesse com o binário unix. E havia as versões mais antigas do OSX onde era necessário inicializar. IMHO são absolutamente as convenções usadas no OSX que causam o problema.
12133 Jackie

4
Existem vários JDKs instalados corretamente na minha máquina. É o plug-in de preferências do Oracles que não permite alternar de 1,8 para 1,7, na linha de comando com um caminho completo, todos eles funcionam com êxito. / usr / libexec / java_home -V lista todos eles - e o painel de preferências do Java 7 permitiu a escolha dos JREs do Java 7
user151019

0

Quero complementar a resposta de @ nkadwa. Sua sugestão funcionou, mas somente depois de alterar também o link simbólico para o CurrentSDK. Então, aqui está o código modificado:

setjdk() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8
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.