在OS X中的Java 7和8之间切换


25

我已经安装了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

但是我想要一个更永久的解决方案。

有人看到我在做什么错吗?

Answers:


50

轻松切换版本

  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)
    

显然,更改仅在外壳期间进行。但是您可以看到现在可以在哪里进行全局设置。


2
一个问题:如果您已经拥有JDK8,则JDK7拒绝安装。它指向oracle.com上的URL,以获取为您提供404的更多信息。当然,JDK8 的卸载说明根本不起作用,所以现在我基本上迷失了。
Eric W

1
只需使用jenv jenv.be
madzohan 2015年

9

您可以使用jEnv(http://www.jenv.be/),它是“可帮助您忘记如何设置JAVA_HOME环境变量以在不同版本的JDK之间进行切换的命令行工具”(摘自项目主页) )。

如果您熟悉Ruby,那么JEnv就像使用RVM或rbenv。它可以帮助您处理计算机上安装的几种不同的JDK,而无需编写自己的脚本以从一个JDK切换到另一个JDK。您可以基于当前目录或基于配置文件来更改当前的Java版本。


您可以对此进行扩展吗?这看起来像是评论,而不是答案。
法国人Austin T

如果您熟悉Ruby,则可以使用RVM或rbenv来更改当前的Java版本,例如基于当前目录或基于配置文件。如果您转到JENV主页,则有一个很好的教程。
Pietro Di Bello 2014年

这篇文章应该适合所有正在寻找答案的人,因此,希望本文中的更多详细信息被视为一个完整而良好的答案。
法国人Austin T

我添加了更多信息并扩展了答案...希望现在看起来更好。感谢您的反馈。
Pietro Di Bello 2014年

4

您不能在Java版本之间切换。在文档中,您将看到:

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

如果要返回旧版本,则必须卸载 Java 8。


谢谢,但这对我对OSX的看法无济于事。
Jackie 2013年

4
@Jackie:实际上,这与OS X无关,而与Oracle有关。早在Apple维护适用于OS X的JDK时,在活动的Java版本之间进行切换就非常容易。请指责甲骨文为他们糟糕的安装程序,而不是OS X.
亚历山德罗韦尔默朗

@AlessandroVermeulen谨致敬意,它不是“安装程序”,我希望它没有像我的linux盒那样预装一个版本。然后,无论如何我都可以使用unix二进制文件“安装”它。然后是OSX的较旧版本,甚至需要引导它。恕我直言,导致问题的绝对是OSX中使用的约定。
Jackie

4
我的机器上正确安装了多个JDK,这是Oracle的首选项插件,不允许从命令行到完整路径的命令行从1.8切换到1.7。/ usr / libexec / java_home -V列出所有它们-Java 7首选项窗格允许选择Java 7 JRE
user151019 2014年

0

我想补充@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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.