2012-10-20 21:36:09 +0000 2012-10-20 21:36:09 +0000
84
84

Comment puis-je 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 mette à jour vers Mac OS X 10.8.2 Build 12C60.

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

Je suis sous OS X 10.8.2 (dernière version).

Réponses (10)

99
99
99
2013-02-22 12:26:51 +0000

On peut utiliser le mécanisme java_home de façon plus pratique.

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 sortie de java_home -V aux seuls numéros de version. Et java_use n'est qu'un raccourci pour ce que nous avons fait plus haut. Par exemple, java_use 1.6 passera à Java 6.

41
41
41
2012-10-24 17:40:09 +0000

Je ne pense pas qu'il soit possible de changer de JRE (runtime environments) voir ici :

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

qui indique :

Un seul JRE peut être installé. L'installation d'un JRE supprime le 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 le 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 simplement remplacer : exec par : /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 sinon cela fonctionne.

Pour utiliser un autre JDK voir ici :

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

qui indique :

Pour exécuter une version différente de Java, indiquez le chemin complet, ou utilisez l'outil java_home : /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Voici une illustration et des exemples tirés de mon installation :

Oracle JDK s'installe :

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 d'Oracle :

Choisir le premier JDK Oracle 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)

Choisir le 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)

Par défaut, le “patch level” le plus élevé est utilisé lorsque seul le numéro de version mineur 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)
35
35
35
2013-03-18 22:53:29 +0000

Une solution pour changer facilement le JDK (pas sûr du JRE), fonctionne avec n'importe quelle version du JDK, pas seulement 6 et 7 source ) :

Bash shell , ajoutez 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  
   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:?;;")  
 }

Fish shell , enregistrez cette fonction sous le nom ~/.config/fish/functions/setjdk.fish :

function setjdk
  if [(count $argv) -ne 0]
    set -x PATH (string match -v /System/Library/Frameworks/JavaVM.framework/Home/bin $PATH)
    if [-n "$JAVA_HOME"]
      set -x PATH (string match -v $JAVA_HOME $PATH)
    end
    set -x JAVA_HOME (/usr/libexec/java_home -v $argv)
    set -x PATH $JAVA_HOME/bin $PATH
    echo JAVA_HOME set to $JAVA_HOME
    java -version
  end
end

Utilisation:

$ setjdk 1.7
```.
7
7
7
2012-10-23 09:02:28 +0000

Une solution 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 à lancer les applications avec : java6 -jar myapp.jar

3
3
3
2013-11-12 10:15:22 +0000

Voici un moyen simple de passer de java 6 à java 7 sur mac osx.

étape 1 : téléchargez le jdk 7 sur le site officiel d'oracle http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html et installez-le étape par étape en suivant les conseils.

étape 2 : mettre $JAVA_HOME dans .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

étape 3 : si vous voulez utiliser jdk 6, il suffit d'alternativement $JAVA_HOME à jdk 6 home path

$ 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
3
3
3
2013-05-16 22:11:30 +0000

Il est assez simple de changer de version de Java instantanément sur OS X sans avoir besoin de changer la variable $JAVA_HOME.

J'exécute la version 10.8.2, et ma variable $JAVA_HOME pointe vers /Bibliothèque/Java/Home

echo $JAVA_HOME

Ce chemin est un lien symbolique, comme on peut le voir en exécutant la commande ls -l

ls -la /Library/Java

Le lien symbolique par défaut pointe vers

Home -> /Bibliothèque/Java/JavaVirtualMachines/1. 6.0_33-b03-424.jdk/Contents/Home/

Pour rediriger java vers mon installation 1.7, je remplace simplement l'ancien lien symbolique Home par un nouveau lien symbolique pointant vers le répertoire home de mon installation Java 1.7.

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

Et voilà ! La version java montre que j'utilise maintenant java 1.7. Il suffit de changer le lien symbolique actuellement nommé “Home” pour changer instantanément le JRE java par défaut.

3
3
3
2014-06-10 17:02:51 +0000

Gérez votre environnement Java (sur Mac et Linux) : http://www.jenv.be/

Similaire au RVM pour Ruby et N pour Node mais pour Java.

3
3
3
2012-10-21 14:58:46 +0000

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)
2
2
2
2014-02-21 14:32:13 +0000

Sur la base de ce qui précède et de quelques autres recherches, j'ai conçu un script que vous pouvez “source” (ou “point”) dans votre profil. Il vous proposera un menu de logements JAVA disponibles sur votre Mac, mais vous pouvez également spécifier le logement par défaut ou présélectionner un choix de menu.

Dans mon .bash_profile :

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

Notez qu'il faut une variable PREJAVA_PATH. Vous pouvez également l'appeler depuis la ligne de commande :

$ . gojava

Ou pour présélectionner la deuxième option :

$ . gojava -c 2

Le fichier gojava est :

#!/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
0
0
0
2016-03-12 13:10:22 +0000

La version en coquille de la réponse @alex (à ajouter à ~/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
```.