Como faço para alternar entre o Java 7 e o Java 6 no OS X 10.8.2?

82

Estou usando o Java SE 7 para programar jogos simples para windows e mac, mas eu tenho que mudar para o java 6 para rodar jogos como o Minecraft no meu computador. Isso costumava funcionar muito bem antes de eu atualizar para o Mac OS X 10.8.2 Build 12C60.

Antes dessa atualização, eu costumava abrir o Java Preferences e marcar o Java 6 ou o Java 7. Mas agora parece que não consigo encontrar o Java Preferences.

Estou executando o OS X 10.8.2 (versão mais recente).

    
por Nikita Jerschow 20.10.2012 / 23:36

10 respostas

41

Eu não acho que é possível mudar o JRE (ambientes de tempo de execução), veja aqui:

link

que diz:

Only one JRE can be installed. Installing a JRE removes the previously installed JRE. The JRE version used by the system can be determined in one of two ways:

Solução alternativa:

Eu tive um problema parecido com o Minecraft com o Wuala. Onde eu precisava rodar o Wuala usando o Java 1.6 enquanto eu precisava desenvolver com o JDK 1.7 e eu consegui isso abrindo o pacote Wuala.app e mudando seu script de inicialização em:

/Applications/Wuala.app/Contents/MacOS/wuala

de:

exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

para:

/usr/libexec/java_home -v 1.6.0 --exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

Ou seja, basta substituir: exec por: /usr/libexec/java_home -v 1.6.0 --exec

Isso, é claro, está bastante envolvido e será interrompido toda vez que você fizer uma atualização automática, mas, caso contrário, funcionará.

Para usar outro JDK, veja aqui:

link

que diz:

To run a different version of Java, either specify the full path, or use the java_home tool: /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Aqui está uma ilustração e exemplos da minha configuração:

O Oracle JDK é instalado:

odin:~ geff$ ls -al /Library/Java/JavaVirtualMachines 
total 0
21058660 0 drwxr-xr-x  3 root  wheel  - 102 24 Oct 18:04:33 2012 jdk1.7.0_09.jdk/
21061692 0 drwxr-xr-x  3 root  wheel  - 102 24 Oct 18:06:08 2012 jdk1.7.0_07.jdk/
21042328 0 drwxrwxr-x  3 root  wheel  - 102 20 Apr 06:58:53 2012 1.7.0.jdk/
21031664 0 drwxrwxr-x  7 root  admin  - 238 24 Oct 18:04:16 2012 ../
21042327 0 drwxr-xr-x  5 root  wheel  - 170 24 Oct 18:06:13 2012 ./

JDK fornecido pela Apple:

odin:~ geff$ ls -al /System/Library/Java/JavaVirtualMachines 
total 0
21026468 0 drwxr-xr-x  3 root  wheel  - 102  1 Nov 17:49:02 2011 1.6.0.jdk/
21026436 0 drwxr-xr-x  6 root  wheel  - 204 24 Mar 23:04:06 2012 ../
21026467 0 drwxr-xr-x  3 root  wheel  - 102  1 Nov 17:49:02 2011 ./

Isso funciona para mim também para usar o JDK 1.6 fornecido pela Apple

odin:~ geff$ /usr/libexec/java_home -v 1.6.0_37 --exec java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

Escolha entre as versões 1.7 do Oracle:

Selecionando o primeiro Oracle JDK 1.7.0_04

odin:~ geff$ /usr/libexec/java_home -v 1.7.0_04 --exec java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Selecionando o JDK 1.7.0_07

odin:~ geff$ /usr/libexec/java_home -v 1.7.0_07 --exec java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

O JDK padrão é o mais alto:

odin:~ geff$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

O padrão é o "nível de correção mais alto ao usar apenas um número de versão menor:

odin:~ geff$ /usr/libexec/java_home -v 1.7.0 --exec java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
    
por 24.10.2012 / 19:40
98

Pode-se usar o mecanismo java_home mais convenientemente.

Digamos que você tenha o Java 7 como padrão:

$ java -version
java version "1.7.0_15" 
…

Agora vamos ativar o Java 6:

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

E aí está:

$ java -version
java version "1.6.0_41"
…

Adicionei esses itens ao meu .bashrc para tornar as coisas ainda mais convenientes:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

java_ls reduz a saída de java_home -V apenas para os números de versão. E java_use é apenas um atalho para o que fizemos acima. Por exemplo. java_use 1.6 mudará para o Java 6.

    
por 22.02.2013 / 13:26
35

Uma solução para alternar facilmente o JDK (não tenho certeza sobre o JRE) ( fonte ):

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  
  echo JAVA_HOME set to $JAVA_HOME  
  java -version  
 }  
 function removeFromPath() {  
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")  
 }

(adicione a função acima ao seu .bash_profile )

Uso:

$ setjdk 1.7
    
por 18.03.2013 / 23:53
7

Uma solução rápida é criar um link simbólico para o antigo binário do Java 6:

sudo ln -s /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands/java /usr/local/bin/java6

Em seguida, execute os aplicativos com: java6 -jar myapp.jar

    
por 23.10.2012 / 11:02
3

O aplicativo de preferências do Java não parece mais listar o Java 1.6. No entanto, quando eu verificar a versão java na linha de comando, recebo:

java -version                                            
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
    
por 21.10.2012 / 16:58
3

É bem simples trocar as versões do Java instantaneamente no OS X sem precisar alterar a variável $ JAVA_HOME.

Estou executando 10.8.2 e minha variável $ JAVA_HOME aponta para / Library / Java / Home

echo $JAVA_HOME

Este caminho é um link simbólico, como pode ser visto executando o comando ls -l

ls -la /Library/Java

O link simbólico padrão aponta para

Home -> /Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/

Para redirecionar o java para minha instalação 1.7, eu simplesmente substituo o link simbólico antigo por um novo link simbólico apontando para o diretório inicial da minha instalação do Java 1.7.

cd /Library/Java
mv Home Home-1.6
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ Home

E voila! java -version mostra que agora estou executando o java 1.7. Basta mudar o link simbólico atualmente chamado 'Home' para alterar instantaneamente o JRE java padrão.

    
por 17.05.2013 / 00:11
3

Aqui está uma maneira fácil de trocar o java 6 e o java 7 no mac osx.

etapa 1: faça o download do jdk 7 no site oficial do oracle link  e instalá-lo passo a passo siga as dicas.

etapa 2: defina $ JAVA_HOME em .bash_profile

$ vim .bash_profile 

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

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

etapa 3: se você quiser usar o jdk 6, apenas a alternativa $ JAVA_HOME para o caminho inicial do jdk 6

$ vim .bash_profile 

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

$ source .bash_profile

$ echo $JAVA_HOME
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    
por 12.11.2013 / 11:15
3

Gerencie seu ambiente Java (no Mac e no Linux): link

Semelhante ao RVM para Ruby e N para Node, mas para Java.

    
por 10.06.2014 / 19:02
2

Com base no exposto acima e em outras pesquisas, criei um script que você pode "originar" (ou "ponto") no seu perfil. Ele solicitará um menu de JAVA_HOMEs disponíveis no seu Mac, embora você também possa especificar a casa padrão ou pré-selecionar uma opção de menu.

No meu .bash_profile :

export PREJAVA_PATH="$PATH:~/bin"
export PATH="${PREJAVA_PATH}"
. gojava -d

Observe que é necessária uma variável PREJAVA_PATH . Você também pode chamá-lo na linha de comando:

$ . gojava

Ou para pré-escolher a segunda opção:

$ . gojava -c 2

Arquivo gojava é:

#!/bin/bash

_exe=/usr/libexec/java_home
_defaultHome=$($_exe)

usage() {
cat <<EOF
$0 [-d] [-c menu_choice]

Sets JAVA_HOME and PATH variables based on a user choice from a menu of available JDKs.

Parameters:

  -d : use system default ($_defaultHome)
  -c : specify a menu choice in advance, without being prompted

Note that environment variable PREJAVA_PATH must be set, and should include the PATH that 
you want with everything but JAVA_HOME/bin.

EOF
exit 1
}

setHomePath() {
  export JAVA_HOME="$1"
  export PATH="${JAVA_HOME}/bin":"${PREPATH}"
}

# TODO: [enhancement] figure out a better way to determine a PATH that excludes the JAVA_HOME
if [ -z "${PREJAVA_PATH}" ]; then
  usage  
else
  PREPATH=${PREJAVA_PATH}
fi

_default=0
_choice=0
OPTIND=1
while getopts "dc:" name; do
 case $name in
      d) _default=1 ;;
      c) _choice="$OPTARG" ;;
      *) echo "unknown parameter $name"
         usage
         ;;
 esac
done

if [ $_default -eq 1 ]; then
  setHomePath "$_defaultHome"
else
  i=1
  while read -r line; do
    choiceList[$i]="$line"
    homeList[$i]=$(echo $line | sed 's/[^\/]*\(\/.*\)//')
    i=$(($i+1))
  done < <($_exe -V 2>&1 | egrep -v '^$|^\/|^Matching')

  if [ $_choice -gt 0 -a $_choice -lt $i ]; then
    setHomePath "${homeList[$_choice]}"
  else
    printf "\nList of available Java versions:\n"
    select choice in "${choiceList[@]}"; do
      if [ $REPLY -gt 0 -a $REPLY -lt $i ]; then
        setHomePath "${homeList[$REPLY]}"
        break
      fi
    done
  fi
fi
    
por 21.02.2014 / 15:32
0

A versão do shell Fish da resposta @alex (adicione a ~/config/fish/config.fish ):

alias java_ls '/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use
    set JAVA_HOME (/usr/libexec/java_home -v $argv)
    set PATH $JAVA_HOME/bin $PATH
    java -version
end
    
por 12.03.2016 / 14:10