我正在使用Java SE 7为Windows和Mac编写简单的游戏,但是我必须切换到Java 6才能在计算机上运行诸如Minecraft之类的游戏。在我更新到Mac OS X 10.8.2 Build 12C60之前,此方法可以正常工作。
在进行此更新之前,我曾经能够打开Java Preferences并检查Java 6或Java7。但是现在我似乎无法找到Java Preferences。
我正在运行OS X 10.8.2(最新版本)。
我正在使用Java SE 7为Windows和Mac编写简单的游戏,但是我必须切换到Java 6才能在计算机上运行诸如Minecraft之类的游戏。在我更新到Mac OS X 10.8.2 Build 12C60之前,此方法可以正常工作。
在进行此更新之前,我曾经能够打开Java Preferences并检查Java 6或Java7。但是现在我似乎无法找到Java Preferences。
我正在运行OS X 10.8.2(最新版本)。
Answers:
http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jre.html
其中指出:
只能安装一个JRE。安装JRE会删除以前安装的JRE。可以通过以下两种方法之一确定系统使用的JRE版本:
我遇到了类似的问题,就像您在Minecraft和Wuala中遇到的那样。我需要使用Java 1.6运行Wuala的地方,而我却需要使用JDK 1.7进行开发,我通过打开Wuala.app软件包并在以下位置更改其启动脚本来进行管理:
/Applications/Wuala.app/Contents/MacOS/wuala
从:
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 $*
即简单地替换exec
为:/usr/libexec/java_home -v 1.6.0 --exec
当然,这是相当复杂的,并且每次wuala自动更新都会被破坏,但否则它将起作用。
http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html
其中指出:
要运行其他版本的Java,请指定完整路径,或使用java_home工具:
/usr/libexec/java_home -v 1.7.0_06 --exec javac -version
这是我的设置中的插图和示例:
Oracle JDK安装:
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:
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 ./
这对于我也可以使用Apple提供的1.6 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)
在1.7 Oracle版本之间选择:
选择第一个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)
选择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)
默认的JDK是最高的JDK:
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)
仅使用次要版本号时,默认为最高的补丁程序级别:
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)
一个人可以java_home
更方便地使用该机制。
假设您将Java 7作为默认设置:
$ java -version
java version "1.7.0_15"
…
现在让我们激活Java 6:
$export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)
那里是:
$ java -version
java version "1.6.0_41"
…
我添加了这些内容,.bashrc
以使事情变得更加方便:
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
将输出减少java_home -V
到仅版本号。这java_use
只是我们上面所做的捷径。例如,java_use 1.6
将切换到Java 6。
echo $PATH | awk -v RS=: -v ORS=: '/Library\/Java\/JavaVirtualMachines/ {next} {print}'| sed 's/:$//'
export PATH = $ JAVA_HOME / bin:$ PATH java -version}
轻松切换JDK(不确定JRE)的解决方案(源):
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:?;;")
}
(将以上功能添加到中.bash_profile
)
用法:
$ setjdk 1.7
在OS X上即时切换Java版本非常简单,无需更改$ JAVA_HOME变量。
我正在运行10.8.2,我的$ JAVA_HOME变量指向/ Library / Java / Home
echo $JAVA_HOME
该路径是一个符号链接,可以通过运行ls -l命令看到
ls -la /Library/Java
默认的符号链接指向
主页-> /图书馆/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/
要将Java重定向到我的1.7安装,我只是用指向我Java 1.7安装主目录的新符号链接替换了旧的Home符号链接。
cd /Library/Java
mv Home Home-1.6
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ Home
瞧!java -version显示我现在正在运行Java 1.7。只需切换当前名为“ Home”的哪个符号链接即可立即更改默认的Java JRE。
这是在Mac OS X上切换Java 6和Java 7的简单方法。
步骤1:从oracle官方网站http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载jdk 7, 并按照提示逐步进行安装。
步骤2:在.bash_profile中设置$ JAVA_HOME
$ 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
步骤3:如果要使用jdk 6,只需将$ JAVA_HOME替换为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
管理Java环境(在Mac和Linux上):http : //www.jenv.be/
与Ruby的RVM和Node的N相似,但对于Java。
基于以上内容和其他一些研究,我设计了一个脚本,您可以将其“来源”(或“点”)到您的个人资料中。它会提示您Mac上可用的JAVA_HOME菜单,尽管您也可以指定默认主页,或预先选择菜单选项。
在我的.bash_profile
:
export PREJAVA_PATH="$PATH:~/bin"
export PATH="${PREJAVA_PATH}"
. gojava -d
注意它需要一个变量PREJAVA_PATH
。您也可以从命令行调用它:
$ . gojava
或预先选择第二个选项:
$ . gojava -c 2
文件gojava
是:
#!/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