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


84

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


3
Vous avez raison, les préférences Java sont maintenant supprimées lors de la dernière mise à jour. Certaines méthodes de shell que j'ai essayées ne fonctionnent pas, mais il doit y avoir un mécanisme pour faciliter cela lorsque vous utilisez également la version 7 la plus récente.
Ylluminate

Réponses:


41

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ù je devais exécuter Wuala en utilisant Java 1.6 alors que je devais développer avec JDK 1.7 et je l'ai géré en ouvrant le package 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 $*

C'est-à-dire simplement remplacer: execpar:/usr/libexec/java_home -v 1.6.0 --exec

Ceci est bien sûr plutôt impliqué 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)

99

On peut utiliser le java_homemécanisme plus facilement.

Disons que vous avez Java 7 par défaut:

$ java -version
java version "1.7.0_15" 
…

Activez maintenant 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é ceci à mon article .bashrcafin 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_lsréduit la sortie de java_home -Vseulement aux numéros de version. Et ce java_usen'est qu'un raccourci pour ce que nous avons fait ci-dessus. Par exemple, java_use 1.6passera à Java 6.


3
dans java_use, vous devez supprimer la version précédente de java de $ PATH.
Eir Nym

@EirNym comment ferait-on cela?
Malcolm

Quelque chose que j'ai trouvé utile pour supprimer java précédent de $ PATH stackoverflow.com/a/370192/1503859
Nitin Mahesh

mise à jour java_use qui a fonctionné pour moi: function java_use () {export JAVA_HOME = $ (/ usr / libexec / java_home -v $ 1) export PATH = echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//' export PATH = $ JAVA_HOME / bin: $ PATH java -version}
Nitin Mahesh

35

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)

Usage:

$ setjdk 1.7

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


3

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

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

J'utilise 10.8.2 et ma variable $ JAVA_HOME pointe vers / 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é! java -version montre que j’exécute maintenant java 1.7. Il suffit de changer le lien symbolique actuellement appelé "Accueil" pour modifier instantanément le JRE JRE par défaut.


3

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éfinissez $ 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 au chemin d’accueil de 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


2

Sur la base de ce qui précède et d’un peu d’autres recherches, j’ai mis au point un script que vous pouvez "identifier" (ou "doter") dans votre profil. Il vous proposera un menu des JAVA_HOME disponibles sur votre Mac, bien que vous puissiez é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 gojavaest:

#!/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

0

La version en coquille de poisson de @alex répond (ajoutez à ~/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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.