我正在使用 Java SE 7 为 Windows 和 Mac 编写一些简单的游戏,但为了在我的计算机上运行 Minecraft 等游戏,我必须切换到 Java 6。在我更新到 Mac OS X 10.8.2 Build 12C60 之前,这个功能运行得很好。
在此更新之前,我曾经能够打开 Java 首选项并选中 Java 6 或 Java 7。但现在我似乎无法找到 Java 首选项。
我正在运行 OS X 10.8.2(最新版本)。
答案1
我认为无法切换 JRE(运行环境),请参见此处:
http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jre.html
其中指出:
只能安装一个 JRE。安装 JRE 会删除之前安装的 JRE。系统使用的 JRE 版本可以通过以下两种方式之一确定:
解决方法:
我在使用 Wuala 玩 Minecraft 时遇到了与您类似的问题。我需要使用 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 自动更新时都会中断,但除此之外它可以正常工作。
要使用其他 JDK,请参见此处:
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 ./
Apple 提供的 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是最高的一个:
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)
答案2
人们可以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。
答案3
一种轻松切换 JDK(不确定 JRE)的解决方案,适用于任何 JDK 版本,而不仅仅是 6 和 7(来源):
Bash 外壳,将此函数添加到您的.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:?;;")
}
鱼壳,将该函数保存为~/.config/fish/functions/setjdk.fish
:
function setjdk
if [ (count $argv) -ne 0 ]
set -g -x PATH (string match -v /System/Library/Frameworks/JavaVM.framework/Home/bin $PATH)
if [ -n "$JAVA_HOME" ]
set -g -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 -g -x JAVA_HOME (/usr/libexec/java_home -v $argv)
set -g -x PATH $JAVA_HOME/bin $PATH
echo JAVA_HOME set to $JAVA_HOME
java -version
end
end
用法:
$ setjdk 1.7
答案4
Java 首选项应用程序似乎不再列出 Java 1.6。但是,当我在命令行中检查 Java 版本时,我得到:
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)