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

Wie kann ich zwischen Java 7 und Java 6 unter OS X 10.8.2 umschalten?

Ich verwende Java SE 7, um einfache Spiele für Windows und Mac zu programmieren, aber ich muss auf Java 6 wechseln, um Spiele wie Minecraft auf meinem Computer auszuführen. Das hat früher gut funktioniert, bevor ich auf Mac OS X 10.8.2 Build 12C60 aktualisiert habe.

Vor diesem Update konnte ich die Java-Einstellungen öffnen und Java 6 oder Java 7 abhaken. Aber jetzt scheine ich Java Preferences nicht mehr finden zu können.

Ich verwende OS X 10.8.2 (neueste Version).

Antworten (10)

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

Bequemer kann man den java_home-Mechanismus verwenden.

Sagen wir, Sie haben Java 7 als Standard:

$ java -version
java version "1.7.0_15" 
…

Nun aktivieren wir Java 6:

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

Und schon ist es da:

$ java -version
java version "1.6.0_41"
…

Ich habe diese zu meinem .bashrc hinzugefügt, um es noch bequemer zu machen:

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 reduziert die Ausgabe von java_home -V auf die Versionsnummern. Und java_use ist nur eine Abkürzung für das, was wir oben gemacht haben. Z.B. wird java_use 1.6 zu Java 6 wechseln.

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

Ich glaube nicht, dass es möglich ist, die JRE (Laufzeitumgebung) zu wechseln, siehe hier:

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

was besagt:

Es kann nur eine JRE installiert werden. Durch die Installation einer JRE wird die zuvor installierte JRE entfernt. Die vom System verwendete JRE-Version kann auf eine von zwei Arten ermittelt werden:

Workaround:

Ich hatte ein ähnliches Problem wie Sie mit Minecraft mit Wuala. Wobei ich Wuala mit Java 1.6 laufen lassen musste, während ich mit JDK 1.7 entwickeln musste. Ich habe das geschafft, indem ich das Wuala.app-Paket geöffnet und sein Startskript in:

/Applications/Wuala.app/Contents/MacOS/wuala

& von:

exec java ${VMARGS} -cp "${JAR_DIR}/loader3.jar":/System/Library/Java/ com.wuala.loader3.Loader3 -alternateprogrampath "${JAR_DIR}" -installed $*

zu:

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

D.h. einfach Ersetzen von: exec mit: /usr/libexec/java_home -v 1.6.0 --exec

Das ist natürlich ziemlich umständlich und wird bei jedem Autoupdate von wuala kaputt gehen, aber ansonsten funktioniert es.

Um ein anderes JDK zu verwenden, siehe hier:

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

die besagt:

Um eine andere Version von Java auszuführen, geben Sie entweder den vollständigen Pfad an oder verwenden Sie das Tool java_home: /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Hier ist eine Illustration und Beispiele aus meiner Einrichtung:

Oracle JDK-Installationen:

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

Von Apple geliefertes JDK:

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

Das funktioniert bei mir auch, um das von Apple gelieferte 1.6 JDK zu verwenden:

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)

Wählen Sie zwischen den 1.7 Oracle-Versionen:

Auswahl des ersten 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)

Auswahl des 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)

Das Standard JDK ist das höchste:

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)

Standardmäßig wird der höchste “Patch-Level verwendet, wenn nur die Minor-Versionsnummer verwendet wird:

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

Eine Lösung zum einfachen Umschalten des JDK (nicht sicher über JRE), funktioniert mit jeder JDK-Version, nicht nur 6 und 7 Quelle ):

Bash-Shell , fügen Sie diese Funktion zu Ihrem .bash_profile hinzu:

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 , speichern Sie diese Funktion als ~/.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

Verwendung:

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

Eine schnelle Abhilfe besteht darin, einen Symlink auf das alte Java 6-Binary zu erstellen:

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

Führen Sie dann die Anwendungen aus mit: java6 -jar myapp.jar

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

Hier ist ein einfacher Weg, um Java 6 und Java 7 auf Mac OSX zu wechseln.

Schritt 1: laden Sie jdk 7 von der offiziellen Website von Oracle herunter http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html und installieren Sie es Schritt für Schritt, indem Sie den Tipps folgen.

Schritt 2: setzen Sie $JAVA_HOME in .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

Schritt 3: wenn Sie jdk 6 verwenden wollen, setzen Sie $JAVA_HOME einfach alternativ auf den 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

Es ist ziemlich einfach, die Java-Version unter OS X sofort zu wechseln, ohne die Variable $JAVA_HOME ändern zu müssen.

Ich verwende 10.8.2, und meine $JAVA_HOME-Variable zeigt auf /Library/Java/Home

echo $JAVA_HOME

Dieser Pfad ist ein symbolischer Link, wie Sie sehen können, wenn Sie den Befehl ls -l ausführen

ls -la /Library/Java

Der standardmäßige symbolische Link zeigt auf

Home -> /Library/Java/JavaVirtualMachines/1. 6.0_33-b03-424.jdk/Contents/Home/

Um Java auf meine 1.7-Installation umzuleiten, ersetze ich einfach den alten Home-Symlink durch einen neuen Symlink, der auf das Home-Verzeichnis meiner Java-1.7-Installation zeigt.

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

Und voila! java -version zeigt an, dass ich jetzt java 1.7 verwende. Wechseln Sie einfach den Symlink, der momentan ‘Home’ heißt, um sofort die Standard-Java-JRE zu ändern.

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

Verwalten Sie Ihre Java-Umgebung (auf Mac und Linux): http://www.jenv.be/

Ähnlich wie RVM für Ruby und N für Node, aber für Java.

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

Die Java-Einstellungs-App scheint Java 1.6 nicht mehr aufzulisten. Wenn ich jedoch die Java-Version in der Befehlszeile prüfe, erhalte ich:

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

Basierend auf den obigen Ausführungen und ein wenig anderer Forschung habe ich ein Skript entwickelt, das Sie in Ihr Profil “einspeisen” können. Es zeigt Ihnen ein Menü mit den verfügbaren JAVA_HOMEs auf Ihrem Mac an, obwohl Sie auch das Standard-Home angeben oder eine Menüauswahl vorauswählen können.

In meinem .bash_profile:

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

Beachten Sie, dass es eine Variable PREJAVA_PATH benötigt. Sie können es auch über die Kommandozeile aufrufen:

$ . gojava

Oder um die zweite Option vorzuwählen:

$ . gojava -c 2

Datei gojava ist:

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

Die Fish-Shell-Version der @alex-Antwort (addiert zu ~/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