84 votes

Comment passer de Java 7 à Java 6 sous OS X 10.8.2 ?

J'utilise Java SE 7 pour programmer des jeux simples pour Windows et Mac, mais je dois passer à Java 6 pour exécuter des jeux tels que Minecraft sur mon ordinateur. Cela fonctionnait très bien avant que je ne passe à Mac OS X 10.8.2 Build 12C60.

Avant cette mise à jour, je pouvais ouvrir les préférences Java et cocher la case Java 6 ou Java 7. Mais maintenant, je ne semble pas pouvoir trouver les préférences Java.

J'utilise OS X 10.8.2 (dernière version).

100voto

kumar Points 3

On peut utiliser le java_home plus facilement.

Disons que vous avez Java 7 par défaut :

$ java -version
java version "1.7.0_15" 
…

Maintenant, activons Java 6 :

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

Et voilà :

$ java -version
java version "1.6.0_41"
…

Je les ai ajoutés à mon .bashrc afin de rendre les choses encore plus pratiques :

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 réduit la production de java_home -V aux seuls numéros de version. Et java_use est juste un raccourci pour ce que nous avons fait ci-dessus. Par exemple. java_use 1.6 va passer à Java 6.

41voto

Tom Morris Points 2182

Je ne pense pas qu'il soit possible de changer de JRE (environnements d'exécution), voir ici :

http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jre.html

qui stipule :

Un seul JRE peut être installé. L'installation d'un JRE supprime le JRE précédemment JRE précédemment installé. La version du JRE utilisée par le système peut être déterminée de deux façons :

Solution :

J'ai eu un problème similaire à celui que vous avez avec Minecraft avec Wuala. Où j'avais besoin d'exécuter Wuala en utilisant Java 1.6 alors que j'avais besoin de développer avec JDK 1.7 et j'ai géré cela en ouvrant le paquet Wuala.app et en changeant son script de démarrage dans :

/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 $*

à :

/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 $*

C'est-à-dire qu'il suffit de les remplacer : exec avec : /usr/libexec/java_home -v 1.6.0 --exec

Ceci est bien sûr assez compliqué et sera cassé à chaque mise à jour automatique de wuala, mais cela fonctionne.

Pour utiliser un autre JDK, voir ici :

http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html

qui stipule :

Pour exécuter une version différente de Java, il faut soit spécifier le chemin complet, soit utiliser l'outil java_home : /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Voici une illustration et des exemples de mon installation :

Installation du JDK d'Oracle :

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 fourni par 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 ./

Cela fonctionne pour moi aussi pour utiliser le JDK 1.6 fourni par 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)

Choisissez entre les versions 1.7 Oracle :

Sélection du premier 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)

Sélection du 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)

Le JDK par défaut est le plus élevé :

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)

Le niveau de correctif le plus élevé est utilisé par défaut lorsque seul le numéro de version mineure est utilisé :

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)

35voto

Neeme Praks Points 481

Une solution pour changer facilement de JDK (pas sûr pour le JRE), fonctionne avec toutes les versions de JDK, pas seulement 6 et 7 ( fuente ):

Bash Shell pour ajouter cette fonction à votre .bash_profile :

function setjdk() {  
  if [ $# -ne 0 ]; then  
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'  
   if [ -n "${JAVA_HOME+x}" ]; then  
    removeFromPath $JAVA_HOME  
   fi
   unset JAVA_HOME # We need this on Big Sur, see https://developer.apple.com/forums/thread/666681
   export JAVA_HOME=`/usr/libexec/java_home -v $@`  
   export PATH=$JAVA_HOME/bin:$PATH  
   echo JAVA_HOME set to $JAVA_HOME  
   java -version  
  fi
 }  
 function removeFromPath() {  
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")  
 }

Poisson Shell et sauvegarder cette fonction comme ~/.config/fish/functions/setjdk.fish :

function setjdk
  if [ (count $argv) -ne 0 ]
    set -g -x PATH (string match -v /System/Library/Frameworks/JavaVM.framework/Home/bin $PATH)
    if [ -n "$JAVA_HOME" ]
      set -g -x PATH (string match -v $JAVA_HOME $PATH)
    end
    set -e JAVA_HOME # We need this on Big Sur, see https://developer.apple.com/forums/thread/666681
    set -g -x JAVA_HOME (/usr/libexec/java_home -v $argv)
    set -g -x PATH $JAVA_HOME/bin $PATH
    echo JAVA_HOME set to $JAVA_HOME
    java -version
  end
end

Utilisation :

$ setjdk 1.7

7voto

mchid Points 36939

Une solution de contournement rapide consiste à créer un lien symbolique vers l'ancien binaire Java 6 :

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

Puis lancez les applications avec : java6 -jar myapp.jar

3voto

arlogb Points 151

L'application de préférences Java ne semble plus répertorier Java 1.6. Cependant, lorsque je vérifie la version de Java dans la ligne de commande, j'obtiens :

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)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X