我已经安装了 Java-8。现在我想默认返回 Java-7,因此我输入...
/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version
但我仍然看到...
java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)
这确实有效...
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home
但我想要一个更持久的解决方案。
有人看到我做错什么了吗?
答案1
轻松切换版本
按任意顺序安装版本 1.6、1.7、1.8。 注意:我相信最后安装的那个决定了哪一个将用于浏览器插件,我不会关心下面更改那些。
然后,添加到您的
~/.bashrc
或~/.bash_profile
,或任何地方:#!/bin/bash export JAVA_HOME=$(/usr/libexec/java_home -v 1.7) setjdk() { export JAVA_HOME=$(/usr/libexec/java_home -v $1) }
通过以下方式验证更改
java -version
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) $ setjdk 1.6 $ java -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode) $ setjdk 1.8 $ java -version java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
显然,这种变化只对 shell 的持续时间有影响。但现在您可以看到可以在哪里进行全局设置。
答案2
您可以使用 jEnv (http://www.jenv.be/),它是“一个命令行工具,可以帮助您忘记如何设置 JAVA_HOME 环境变量以在不同版本的 JDK 之间切换”(取自该项目的主页)。
如果您熟悉 Ruby,JEnv 就像使用 RVM 或 rbenv 一样。它可以帮助您处理机器上安装的几个不同的 JDK,而无需编写自己的脚本来从一个 JDK 切换到另一个。您可以根据当前目录或配置文件更改当前的 Java 版本。
答案3
答案4
我想补充一下@nkadwa的回答。他的建议有效,但只有在更改 CurrentSDK 的符号链接后才有效。因此,以下是修改后的代码:
setjdk() {
export JAVA_HOME=$(/usr/libexec/java_home -v $1)
sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8