在 OS X 中切换 Java 7 和 8

在 OS X 中切换 Java 7 和 8

我已经安装了 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. 按任意顺序安装版本 1.6、1.7、1.8。 注意:我相信最后安装的那个决定了哪一个将用于浏览器插件,我不会关心下面更改那些。

  2. 然后,添加到您的~/.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)
    }
    
  3. 通过以下方式验证更改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

您无法在 Java 版本之间切换。在文档你看:

一次只能安装一个 JRE。系统不会安装版本低于当前版本的 JRE。如果您希望安装较低版本的 JRE,请先卸载当前版本。

如果你想回到旧版本,你必须卸载Java 8。

答案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

相关内容