web-dev-qa-db-fra.com

Commentaire pass 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 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).

82
Nikita Jerschow

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

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:

Solution de contournement:

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.

Pour utiliser un autre JDK, voir ici:

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)
41
Geff

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.

98
Alex

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
35
Neeme Praks

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

7
stephendv

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
3
caiying

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.

3
supershnee

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

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

3
Misha Reyzlin

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)
3
arlogb

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
2
Phil

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
0
ceilfors