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?

Jackie
fonte

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.

nkadwa
fonte
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.

Pietro Di Bello
fonte
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.

Christian Wörz
fonte
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
imdahmd
fonte