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

Hoe schakel ik tussen Java 7 en Java 6 op OS X 10.8.2?

Ik gebruik Java SE 7 om eenvoudige spelletjes te programmeren voor windows en mac, maar ik moet overschakelen naar Java 6 om spelletjes zoals Minecraft op mijn computer te draaien. Dit werkte prima voordat ik een update uitvoerde naar Mac OS X 10.8.2 Build 12C60.

Voor deze update kon ik Java Voorkeuren openen en Java 6 of Java 7 aanvinken. Maar nu schijn ik niet in staat te zijn om Java Voorkeuren te vinden.

Ik draai OS X 10.8.2 (laatste versie).

Antwoorden (10)

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

Men kan het java_home mechanisme handiger gebruiken.

Stel dat je Java 7 als standaard hebt:

$ java -version
java version "1.7.0_15" 
…

Laten we nu Java 6 activeren:

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

En daar is het:

$ java -version
java version "1.6.0_41"
…

Ik heb deze toegevoegd aan mijn .bashrc om de dingen nog handiger te maken:

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 reduceert de uitvoer van java_home -V tot alleen de versienummers. En java_use is gewoon een snelkoppeling voor wat we hierboven deden. Bijv. java_use 1.6 zal overschakelen naar Java 6.

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

Ik denk niet dat het mogelijk is om van JRE (runtime environment) te wisselen zie hier:

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

waarin staat:

Er kan maar één JRE geïnstalleerd worden. Het installeren van een JRE verwijdert de eerder geïnstalleerde JRE. De JRE-versie die door het systeem wordt gebruikt, kan op een van de volgende twee manieren worden bepaald:

Workaround:

Ik had een soortgelijk probleem als jij hebt met Minecraft met Wuala. Waar ik Wuala moest draaien met Java 1.6 terwijl ik moest ontwikkelen met JDK 1.7 en ik kreeg dit voor elkaar door het Wuala.app pakket te openen en zijn opstartscript te veranderen in:

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

van:

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

naar:

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

Ik bedoel gewoon vervangen: exec door: /usr/libexec/java_home -v 1.6.0 --exec

Dit is natuurlijk nogal omslachtig en zal elke keer dat wuala autoupdates uitvoert kapot gaan, maar verder werkt het.

Om een andere JDK te gebruiken zie hier:

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

waarin staat:

Om een andere versie van Java te draaien, geef het volledige pad op, of gebruik het hulpprogramma java_home: /usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Hier is een illustratie en voorbeelden van mijn setup:

Oracle JDK installeert:

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

Door Apple geleverde 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 ./

Dit werkt voor mij ook om de door Apple geleverde 1.6 JDK te gebruiken

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)

Kies tussen de 1.7 Oracle versies:

Kiezen tussen de eerste 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)

Kiezen tussen 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)

De standaard JDK is de hoogste:

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)

Standaard is het hoogste “patch”-niveau wanneer alleen het kleine versienummer wordt gebruikt:

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

Een oplossing om gemakkelijk van JDK (niet zeker over JRE) te veranderen, werkt met elke JDK versie, niet alleen 6 en 7 bron ):

Bash shell , voeg deze functie toe aan uw .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  
   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 , sla deze functie op 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

Gebruik:

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

Een snelle workaround is om een symlink te maken naar de oude Java 6 binary:

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

Voer dan de apps uit met: java6 -jar myapp.jar

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

Hier is een gemakkelijke manier om java 6 en java 7 op mac osx om te schakelen.

stap 1 : download jdk 7 van oracle official website http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html en installeer het stap voor stap volg de tips.

stap 2: stel $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

stap 3: als u jdk 6 wilt gebruiken, vervang dan $JAVA_HOME door 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

Het is vrij eenvoudig om op OS X onmiddellijk van Java-versie te veranderen zonder de $JAVA_HOME variabele te hoeven veranderen.

Ik draai 10.8.2, en mijn $JAVA_HOME variabele wijst naar /Library/Java/Home

echo $JAVA_HOME

Dit pad is een symbolische link, zoals te zien is door het uitvoeren van ls -l commando

ls -la /Library/Java

De standaard symbolische link wijst naar

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

Om java om te leiden naar mijn 1.7 installatie, vervang ik simpelweg de oude Home symlink door een nieuwe symlink die wijst naar de home directory van mijn Java 1.7 installatie.

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

En voila! java -version laat zien dat ik nu java 1.7 draai. Verwissel gewoon welke symlink momenteel ‘Home’ heet om direct de standaard java JRE te veranderen.

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

Beheer uw Java omgeving (op Mac en Linux): Vergelijkbaar met RVM voor Ruby en N voor Node, maar dan voor Java.

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

De Java voorkeuren app lijkt Java 1.6 niet meer te vermelden. Maar als ik java versie controleer in de commandoregel krijg ik:

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

Gebaseerd op het bovenstaande en wat ander onderzoek, heb ik een script bedacht dat je kunt “sourceen” (of “dotten”) in je profiel. Het zal je vragen om een menu van beschikbare JAVA_HOMEs op je Mac, hoewel je ook de standaard home kunt opgeven, of een voorselectie van een menukeuze kunt maken.

In mijn .bash_profile:

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

Merk op dat er een variabele PREJAVA_PATH voor nodig is. Je kunt het ook vanaf de commandoregel aanroepen:

$ . gojava

Of om de tweede optie vooraf te kiezen:

$ . gojava -c 2

Bestand gojava is:

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

De Fish Shell-versie van @alex antwoord (toevoegen aan ~/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