在Mac OS X上安装了Java 7,但终端仍在使用版本6

397

我已经安装了从 Oracle 官网下载的 JDK 7u7 版本。但是安装后,终端仍然显示 Java 版本 6。

$java -version
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode)

有什么想法为什么Java 7没有显示出来?

答案: 好了,问题已经解决。以下是答案: 我发现我的终端有一个.bash_profile文件,而且JAVA_HOME变量被设置为1.6。

export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home"

每次我打开一个新的终端窗口都会出现问题,这就是引起问题的那一行。 只需删除此行即可解决问题。您仍然需要按照@aleroot所说的做,但如果这对您不起作用,请检查.bash_profile(或.bashrc)设置文件,看看是否之前导出了任何Java版本。


24
我曾经遇到这个问题,但我只更新了JRE而没有更新JDK。当我更新了JDK之后,它显示了正确的版本号。 - Paul Maserrat
迁移到 Ask Different? - Nakilon
15
为了强调一下@Mazzy的评论,这是一个容易犯的错误。下载JRE v7会导致在运行在线版本检查器或Java控制面板时出现版本7,但是当从命令行调用Java时,您将运行先前安装的JDK中的较旧版本。因此,请仔细检查确保您安装的是JDK而不仅仅是JRE。 - Cam Jackson
1
解决这个问题的最佳方法是使用“export JAVA_HOME”方法,如此处所述,以稍微灵活的方式进行。 - Brad Parks
5
让我用大写字母强调一下:许多人登陆此页面只需要下载并安装最新的JDK。Java控制面板仅更新JRE。 - Walter Tross
显示剩余2条评论
27个回答

10

我做了

export JAVA_HOME=`/usr/libexec/java_home`
and that fixed my Java 8 issue.
before:
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

1
"/usr/libexec/java_home" 是一个非常好的指示,谢谢! - Raffi
1
在阅读了大量可能的解决方案后,为我完成了工作!谢谢 :) - ronnyrr

7

我建议您查看工具Jenv

这将允许您随时在已安装的JVM之间切换。

只需:

jenv global oracle-1.7

然后后来为了测试目的:

jenv global oracle-1.6

您还有更多的命令可供使用。


如果您已经在您的OS X系统中使用Homebrew,那么您可以利用它。我认为这比其他方式更加清洁。更多信息请参见:http://www.jenv.be/ - piku

7

http://www.java.com/en/download/faq/java_mac.xml是一个很好的地方,可以了解为什么Apple停止支持Java,为什么Java Preferences不再存在,并依赖于System_Preferences => Java => Java,如果安装了来自Oracle的Java 7。


2
这是很好的信息,但你应该提供比链接更多的细节。如果链接在未来失效了,你的回答就不会有太大的用处了。 - psubsee2003

6
这简直太疯狂了!Oracle怎么会提供一个安装程序,却什么都没有安装呢?
无论如何,对我来说是这样的:
sudo rm /usr/bin/java
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/bin/java /usr/bin/java

其中1.8.0_31是您安装的Java版本...


为什么苹果不提供一个合适的方法? - jwilleke

6

如果您的计算机上安装了多个Java版本,并且希望在运行时动态选择它,那么可以采取以下措施。例如,在我的情况下,我有两个版本:

ls -la /Library/Java/JavaVirtualMachines
drwxr-xr-x  3 root  wheel    96B Nov 16  2014 jdk1.7.0_71.jdk/
drwxr-xr-x  3 root  wheel    96B Mar  1  2015 jdk1.8.0_31.jdk/

您可以通过修改/etc/profile内容来更改它们。只需在文件末尾添加(或修改)以下两行即可:
export JAVA_HOME=YOUR_JAVA_PATH/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

在我的情况下,如果我想使用 Java 7,则应如下所示:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

Java 8:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

保存文件后,请运行source /etc/profile,这样就可以工作了。以下是我按照第一种和第二种选项使用时的结果:

Java 7:

java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

Java 8:

java -version 
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)

如果您的Java文件夹位于不同位置,则过程类似。

6
硬编码JAVA_HOME路径可能不是最好的选择。 在Mac OSX Lion 10.7.5和JDK 1.7.0_13上,/usr/libexec/java_home实用程序仍然对我有效。 根据其手册页面,它旨在与苹果的旧Java首选项窗格一起使用,但似乎可以与Oracle提供的替代品(Java控制面板)一起使用。例如,运行/usr/libexec/java_home -V会列出我机器上安装的所有JDK(包括1.6.*和1.7.*)。
因此,如其他线程所讨论的那样(例如What should I set JAVA_HOME to on OSX),我仍建议将以下行添加到您的.bash_profile文件中:
export JAVA_HOME=$(/usr/libexec/java_home)

我同意你在这里的评论,因为那是最佳实践,但由于java_home环境变量没有被正确设置,所以这不起作用。我相信在苹果的最新更新中,你的建议已经成为终端和其他相关应用程序中JAVA_HOME的默认操作。 - Derek
@Derek,“java_home环境变量没有正确设置”是什么意思?根据这篇文章/usr/libexec/java_home工具也适用于Java 7版本,并返回已安装的最新JDK的路径。在我的机器上完全可以正常运行。 - zagyi
1
是的,它应该可以工作,但对于像Pepijin提到的那些有问题的人来说却不起作用。 - Derek

5

简单解决方案

export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH"

太棒了。这个解决方案让我今天愉快了起来。非常感谢Mick。 - A user

3

我认为您可以尝试安装jdk而不是jre。通过安装jdk,/usr/bin/java中的java将被替换,并且所有库都将正常工作。


3
如果您已经安装了Homebrew,您可以安装java-switcher来更快地更改Java默认版本。
brew tap andycillin/tap
brew install java-switcher

接下来,您可以使用一个命令来切换您的默认Java版本。

java-switcher 1.7

或者

java-switcher 10

谢谢Andy,这很容易。 - GreenROBO

1
这是因为您的.bash_profile没有反映出更改。要反映出更改,请使用以下命令。
$ source .bash_profile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接