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 pour Mac OS X 10.8.2 Build 12C60.
Avant cette mise à jour, j'étais capable d'ouvrir Java Preferences et de cocher Java 6 ou Java 7. Mais maintenant, il semble que je ne puisse pas trouver les préférences Java.
J'utilise OS X 10.8.2 (dernière version).
http://docs.Oracle.com/javase/7/docs/webnotes/install/mac/mac-jre.html
quels États:
Un seul JRE peut être installé. L'installation d'un JRE supprime le JRE précédemment installé. La version de JRE utilisée par le système peut être déterminée de deux manières:
J'ai eu un problème similaire à celui que vous avez avec Minecraft avec Wuala. Où j'avais besoin d'exécuter Wuala avec Java 1.6 alors que j'avais besoin de développer avec JDK 1.7 et j'ai réussi à cela en ouvrant le paquet Wuala.app et en modifiant 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 $*
Je remplace simplement: exec
par: /usr/libexec/Java_home -v 1.6.0 --exec
Ceci est bien sûr assez compliqué et se briserait à chaque fois que wuala se mettrait à jour automatiquement, mais sinon cela fonctionne.
http://docs.Oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html
quels États:
Pour exécuter une version différente de Java, spécifiez 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 de ma configuration:
JDK Oracle 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 aussi pour moi d’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:
Sélection du 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)
Sélection de 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 "niveau de correctif le plus élevé est utilisé lorsque vous utilisez uniquement un numéro de version mineur:
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)
On peut utiliser le mécanisme Java_home
de manière 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"
…
J'ai ajouté ces éléments à 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
est juste un raccourci pour ce que nous avons fait ci-dessus. Par exemple. Java_use 1.6
passera à Java 6.
Une solution pour changer facilement de JDK (pas sûr de JRE) ( source ):
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:?;;")
}
(ajouter la fonction ci-dessus à votre .bash_profile
)
Utilisation:
$ setjdk 1.7
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 exécutez les applications avec: Java6 -jar myapp.jar
Voici un moyen simple de passer de Java 6 à Java 7 sur mac osx.
étape 1: téléchargez jdk 7 depuis le site officiel 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: définir $ 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'alterner $ 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
Il est assez simple de changer instantanément de version Java sur OS X sans avoir à changer la variable $ Java_HOME.
J'exécute 10.8.2 et ma variable $ Java_HOME pointe sur/Library/Java/Home
echo $Java_HOME
Ce chemin est un lien symbolique, comme on peut le voir en lançant la commande ls -l
ls -la /Library/Java
Le lien symbolique par défaut pointe vers
Accueil -> /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 le tour est joué! La version Java montre que j’exécute maintenant Java 1.7. Il suffit de changer le lien symbolique actuellement appelé "Accueil" pour changer instantanément le JRE Java par défaut.
Gérez votre environnement Java (sur Mac et Linux): http://www.jenv.be/
Similaire à RVM pour Ruby et N pour Node mais pour Java.
L'application de préférences Java ne semble plus lister Java 1.6. Cependant, lorsque je vérifie la version de Java dans la ligne de commande, je reçois:
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)
Sur la base de ce qui précède et d'un peu d'autres recherches, j'ai conçu un script que vous pouvez "identifier" (ou "doter") dans votre profil. Il vous proposera un menu contenant les Java_HOME disponibles sur votre Mac, mais vous pouvez également spécifier le répertoire 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 nécessite une variable PREJAVA_PATH
. Vous pouvez aussi l'appeler depuis la ligne de commande:
$ . gojava
Ou pour pré-choisir 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/[^\/]*\(\/.*\)/\1/')
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
La version Fish Shell de @alex answer (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