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

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

Vor diesem Update konnte ich Java-Einstellungen öffnen und Java 6 oder Java 7 deaktivieren. Aber jetzt kann ich anscheinend keine Java-Einstellungen finden.

Ich verwende OS X 10.8.2 (neueste Version).

Author: slhck, 2012-10-20

10 answers

Ich glaube nicht, dass es möglich ist, JRE (Runtime environments) 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. Die Installation einer JRE entfernt die zuvor installierte JRE. Die vom System verwendete JRE-Version kann bestimmt werden auf zwei Arten:

Problemumgehung:

Ich hatte ein ähnliches Problem wie du mit Minecraft mit Wuala. Wo ich Wuala mit Java 1.6 ausführen musste, während ich mit JDK 1.7 entwickeln musste, und ich schaffte dies, indem ich die Wuala öffnete.app-Paket und Ändern des Startskripts 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 $*

Bis:

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

Dh einfach ersetzen: exec mit: /usr/libexec/java_home -v 1.6.0 --exec

Dies ist natürlich ziemlich involviert und wird jedes Mal kaputt gehen, wenn wuala autoupdates, aber sonst funktioniert es.

Um ein anderes JDK zu verwenden siehe hier:

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

Was besagt:

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

Hier ist eine illustration und Beispiele aus meinem setup:

Oracle JDK installiert:

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

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

Dies funktioniert auch für mich, um den mitgelieferten Apfel zu verwenden. JDK

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

Auswählen von 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)

Die Standard-JDK ist die 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)

Ist standardmäßig die höchste "Patch-Stufe", wenn nur eine untergeordnete 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)
 41
Author: Geff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-07-24 18:41:10

Man kann den java_home Mechanismus bequemer benutzen.

Angenommen, Sie haben Java 7 als Standard:

$ java -version
java version "1.7.0_15" 
…

Jetzt aktivieren wir Java 6:

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

Und da ist es:

$ java -version
java version "1.6.0_41"
…

Ich habe diese zu meinem .bashrc hinzugefügt, um die Dinge 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 nur auf die Versionsnummern. Und java_use ist nur eine Abkürzung für das, was wir oben getan haben. ZB wechselt java_use 1.6 zu Java 6.

 100
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-04-02 06:30:05

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:

function setjdk() {  
  if [ $# -ne 0 ]; then  
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'  
   if [ -n "${JAVA_HOME+x}" ]; then  
    removeFromPath $JAVA_HOME  
   fi
   unset JAVA_HOME # We need this on Big Sur, see https://developer.apple.com/forums/thread/666681
   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:?;;")  
 }

Fischschale, speichere 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 -e JAVA_HOME # We need this on Big Sur, see https://developer.apple.com/forums/thread/666681
    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
 35
Author: Neeme Praks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-17 21:05:46

Eine schnelle Problemumgehung besteht darin, einen Symlink zur alten Java 6-Binärdatei zu erstellen:

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

Dann führen Sie die Apps mit: java6-jar myapp.jar -

 7
Author: stephendv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-10-23 09:02:28

Die Java preferences App scheint Java 1.6 nicht mehr aufzulisten. Wenn ich jedoch die Java-Version in der Befehlszeile überprü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)
 3
Author: arlogb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-10-21 14:58:46

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

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

echo $JAVA_HOME

Dieser Pfad ist ein symbolischer Link, wie durch Ausführen des Befehls ls-l

ls -la /Library/Java

Der symbolische Standardlink zeigt auf

Startseite -> /Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/

Um Java auf mein 1.7 umzuleiten installation, ich ersetze nur den alten Home-Symlink durch einen neuen Symlink, der auf das Home-Verzeichnis meiner Java 1.7-Installation verweist.

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, dass ich jetzt mit java 1.7. Wechseln Sie einfach, welcher Symlink derzeit "Home" heißt, um die Standard-Java-JRE sofort zu ändern.

 3
Author: supershnee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-05-16 22:11:30

Hier ist eine einfache Möglichkeit, Java 6 und Java 7 unter Mac osx zu wechseln.

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

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 möchten, fügen Sie einfach $JAVA_HOME zu 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
Author: caiying,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-11-12 10:15:22

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

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

 3
Author: Misha Reyzlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-06-10 17:02:51

Basierend auf dem obigen und ein wenig anderer Forschung habe ich ein Skript entwickelt, das Sie "Quelle" (oder "Punkt") in Ihr Profil. Es wird Sie mit einem Menü der verfügbaren JAVA_HOMEs auf Ihrem Mac auffordern, obwohl Sie auch die Standard-Home angeben können, oder eine Menüauswahl vorwählen.

In meinem .bash_profile:

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

Hinweis: es erfordert eine variable PREJAVA_PATH. Sie können es auch über die Befehlszeile 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/[^\/]*\(\/.*\)/\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
Author: Phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-02-21 14:39:16

Die Fisch-Shell-Version von @alex Antwort (hinzufügen 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
 0
Author: ceilfors,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-03-12 13:10:22