在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个回答

299

Oracle的安装程序会将Java安装在/Library/Internet Plug-Ins/JavaAppletPlugin.plugin中,它不会覆盖/usr/bin/java。因此,如果您发出以下命令:

whereis java
在终端中,它会返回 /usr/bin/java。(它指向 Apple 的 1.6 版本 /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java)。因此,如果您想使用新的 Java 版本,请替换 /usr/bin/java 符号链接,使其指向 /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
sudo rm /usr/bin/java
sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin

22
这是命令:sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin - Binarian
11
维克托的命令有效。但你可能还需要确保删除现有的Java符号链接rm /usr/bin/java - Matt Florence
7
请记得您还需要更新jar、jarsigner、javac、javadoc、javah、javap、javaws、jcmd、jconsole、jdb、jhat、jinfo、jmap、jmc、jps、jrunscript、jsadebugd、jstack、jstat、jstatd和jvisualvm的链接,以提供一个连贯的环境。这使得此选项相当繁重。 - Joe Atzberger
64
我得到了“rm: /usr/bin/java: Operation not permitted”这个消息。 - Aditya
37
或者 export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH" - Mick
显示剩余11条评论

115
安装JDK 7,这个问题将自行解决。
务必获取包括编译器和类似工具的Java开发工具包(JDK),而不仅仅是Java运行环境(JRE)。

7
请安装完整的JDK,而不仅仅是JRE。 - BrainO2
3
在OSX 10.9.4上已确认OK。它不会更改/usr/bin的链接,只会更改其下方的内容。因此, /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java #但是: /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java -version java版本“1.7.0_67” - Joe Atzberger
1
还适用于JDK 1.8 -- (安装JDK 1.8而不是JRE 1.8) - Mark Chackerian
我尝试安装Java 1.8,但在El Capitan上无法运行。安装1.7解决了我的问题。 - SPRBRN

105

vi ~/.bash_profile

在文件中添加以下内容:

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

这会告诉您的 /usr/bin/java 链接目标使用安装在

/Library/Java/JavaVirtualMachines/

路径下的最新的Java 7包。例如对于JDK版本为 1.7.0_17 的情况,JAVA_HOME 的值应该是:

/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home

注意:最近在此领域有很多变化,将Mac OS X从苹果自己的系统集成Java软件包转移到基于Oracle的Java软件包。上述解决方案适用于 Mac OS X 10.8.2 版本。


4
对于这个答案我给一个+1,因为在“Java Preferences”被移除之前和之后的Mac OS版本中都适用,而且通过展示“-v”选项,它表明了如何在安装了Java 7的情况下使用Java 6(这正是我想要的)。因此,在我的Mac Lion系统(10.7.5)上,我使用带有“-v 1.6”的相同命令。这很关键,因为我需要Java 6,而Oracle并没有为Mac OS提供Java 6,只有Java 7,这让我能够使用已安装的Java 6,即使安装了Java 7。 - Rhubarb
1
此外,为了使其更加灵活:http://mikemainguy.blogspot.com/2014/11/easily-changing-java-versions-in-osx.html - Mainguy
这个令人惊叹的答案可以在此处找到更多信息:https://dev59.com/4Gw15IYBdhLWcg3weLoF#6588410。 - Brad Parks
在安装了1.8 JKD之后,这对我在Sierra 10.12上起作用了,通过将1.7更改为1.8,导出工作正常。使用java_home实用程序的好答案! - Scott Byers
对于 .cshrc 文件,setenv JAVA_HOME \/usr/libexec/java_home -v 15`` - Sam Barnum

65

你需要进入Java首选项窗格并仅标记JVM 7,方法如下:

Java Preferences

在Mac OS X中轻松快速地打开Java首选项窗格,您只需使用+空格调用Spotlight并键入System Preferences,它将出现在窗口的最后一行。


3
找到了,但终端中仍然是1.6版本,我需要重新启动电脑或者做些其他的操作吗? - Yang
1
这个面板在10.8中已经不存在了。有什么替代方案吗? - Pepijn
70
从Mac OSX 10.8.2开始,面板已经被废除,实际上也不再需要它。相反,你需要使用export JAVA_HOME=\/usr/libexec/java_home -v 1.7``来切换到来自Oracle的最新Java 7 JDK。 - Uwe Günther
23
我想他们在某个时候放弃了Java Preferences。在我的电脑上,Spotlight找不到它。运行的是10.8.5版本。 - quickshiftin
1
您可以在“系统偏好设置”->“Java”下找到 JAVA_HOME 的确切位置。 点击“Java”选项卡,然后点击“查看”。路径变量将显示您的JAVA_HOME(瓦片/主目录)。 - agaase
显示剩余5条评论

56

我的情况是,Oracle安装到了与我习惯不同的位置。

从Oracle下载:http://java.com/en/download/mac_download.jsp?locale=en

  1. 在“系统偏好设置”中查看是否已正确安装:

    • 使用Command-Space打开Spotlight,输入“系统偏好设置”,按回车键。
    • 点击底部行中的Java图标。打开Java控制面板后,点击“Java”选项卡,“查看...”,并验证您的安装是否成功。您还可以在这里看到“路径”,如果与我的不同,则可以将其替换为下面的命令。
  2. 验证版本是否正确(必要时更改路径):

    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version

  3. 将/usr/bin/java链接至新安装目录:

    sudo ln -fs /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin/java

  4. 检查版本是否正确:

    java -version


对我也起作用了,我也尝试了其他的解释,但是在Maverix上没有面板可以选择版本号,而且更改.bash_profile也不起作用。完美! - Alex Cio
Eclipse没有在编译器选项中看到1.7版本。 - Laser Hawk
对我有用!之前是1.6.0_65,使用这个解决方案后变成了1.7.0_60...谢谢! :) - maths
但是eclipse给出的错误是:“JVM共享库仍然不包含jni_createjavavm符号”,非常遗憾.... :( - maths
1
感谢您的帮助!除了这个,其他方法都没有起作用。正在运行Yosemite系统。 - LordZardeck
显示剩余3条评论

36

我曾遇到类似问题,终端无法更新Java版本以匹配在Mac上安装的版本。

JAVA_HOME 环境变量设置没有问题。

我想出了一个临时而有些痛苦但有效的解决方案。

在你的 .bash_profile 中添加以下行:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home"

(这是我的机器上的路径,但你的可能不同,请确保获取你自己的路径。这些路径应该匹配到 /Library/Java/JavaVirtualMachines/)

运行命令 source ~/.bash_profile

正如我所提到的,这只是一个临时的权宜之计,因为Java Home路径是硬编码的。实际上没有办法设置路径以获取最新版本,因为这就是苹果公司已经在终端中处理的问题,而问题在于Apple的java_home环境变量没有得到更新。


4
目录为空。$ ls /Library/Java/JavaVirtualMachines/ - Pepijn
1
你可能安装Java 7的位置有问题。请前往Oracle网站。点击“Java SE Development Kit 7u11”链接,接受许可协议,并下载“jdk-7u11-macosx-x64.dmg”。使用dmg安装Java 7,这将把它放在您的JavaVirtualMachines目录中。 - Derek
这是2019年初在Mojave 10.14.1上的一个解决方案。 - bitsand

26
自从El Capitan以来,因为新的“无根”策略的引入,删除/usr/bin/java符号链接变得困难。

因此,我只是在我的.bashrc文件中将最新Java版本的路径(在我的情况下是/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin)添加到了PATH中。

# Use latest java version
export PATH=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH

为了在当前会话中重新加载您的.bashrc文件,请在shell中运行source ~/.bashrc 。这只需要针对在更改.bashrc文件之前启动的会话进行。

现在,在shell中使用java时,将使用最新版本。


1
这个特定的解决方案在我的Mac OS X El Capitan上有效。我没有绕过El Capitan上的安全设置,而是安装了Java版本1.8。执行export JAVA_HOME=/my specific path等等/并没有起作用(在首选项中找到路径1.8之后)。请注意,1.6仍然安装着。我不得不创建一个.bashrc文件,并按照这里描述的设置路径。我运行了java -version,咔嚓!它奏效了。 - umbregachoong
我非常希望这能够起作用,因为我正在使用El Capitan系统,而其他解决方案都无法正常运行。我创建了一个“.bashrc”文件并添加了上述行,但如果我输入“java -version”,仍然会显示1.6版本。我可能忽略了什么吗? - noLongerRandom
@user3810073 或许你需要运行 source .bashrc 命令,以重新加载 .bashrc 文件的内容。 - TabeaKischka
对我有用。我将该行添加到.bash_profile文件中(在我的用户主目录中),然后执行source .bash_profile命令。然后java -version命令给出了最新的版本。谢谢! - mrmuggles
这也可以通过创建符号链接到/usr/local/bin来实现,方法如下:sudo ln -sf "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" /usr/local/bin/java假设 /usr/local/bin$PATH 中位于 /usr/bin 之前,这应该是默认设置。 - lifeofguenter

21

14
您可以在终端中执行以下命令:

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

这将使用新的Java版本替换旧版本。


1
奇怪的是,它替换了,但是如果我关闭终端并重新打开,它又会显示旧版本。 - Parth Patel
这是真的。太奇怪了。非常临时的解决方案。 - A user
1
将此添加到.bashrc文件中,然后运行source ~/.bashrc以使其永久生效。 - Azimjon Ilkhomov

13
基本问题: /usr/bin/java 最初指向 OSX 自带的一个 (/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java),我们需要将其指向 JDK 安装程序下载的那个。以下步骤适用于 OSX 10.10.4 Yosemite。
  • 打开 "系统偏好设置" -> 选择 "Java"。Java 窗口会打开。
  • 点击顶部的 Java 选项卡。点击“查看”按钮。
  • Java 运行时环境设置选项卡会如下所示: JRE Settings tab
  • 双击 路径 项目并复制该路径(cmd+c)。这是由 JDK 安装程序/更新程序安装的最新版本。在我的情况下,路径是 /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
  • 打开终端。在这一步中,我们要将系统 Java 二进制文件指向我们在上一步中发现的最新版本(符号链接,ln -s 命令)。运行以下命令:

sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin/java

就这样。要验证,您只需在终端上运行 java -version 它应该输出您安装/更新的最新版本。


2
除了我必须在ln命令中添加-f之外,这对我很有效。否则,如果使用ln:/usr/bin/java,则会失败:文件已存在。 - Dale
在我的情况下,我需要在终端命令中使用usr/local/bin而不是usr/bin - iAkshay
我收到了“操作不允许”的错误提示。 - Shardul
以这种方式获取路径是理想的。然后我能够导出它并重新加载bashrc以解决版本问题。在我的情况下,我正在从Mojave 10.14.1上的版本7迁移到版本8。 - bitsand

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