在OS X 10.9(Mavericks)上安装Java

321
我已经在Mac OS X v10.8(Mountain Lion)上安装了JDK。当我将其升级到Mac OS X v10.9(Mavericks)并在终端中运行java -version时,显示:

没有Java运行时环境,请请求安装。

然后我在我的Mac上手动安装了JDK(1.7)。看起来安装成功了。当安装完成后,我打开终端并键入java -version。它仍然显示相同的错误:

没有Java运行时环境,请请求安装。

我该如何解决这个问题?

1
我不知道终端有什么问题,但我在Mavericks上运行Eclipse,所有项目都可以编译。 - Sunny
1
似乎旧版的Java启动器只支持JDK 1.6,但Mavericks默认没有安装1.6。 - Shawn
1
你安装了Java 6,而不是OP最初暗示他们需要的Java 7。我对如何达成这个解决方案感兴趣。此外,必须有一种“替代”方法来直接处理终端的反馈。 - Rondo
4
这对于Java 6来说很棒,但如何让Java 7工作? - 190290000 Ruble Man
2
在终端中安装Java 7 JRE并使其工作,我添加了一个潜在的答案:https://dev59.com/_mIk5IYBdhLWcg3wJ7P4#19582689 - analogue
显示剩余4条评论
11个回答

277

新的Mavericks(10.9)显示了“请求安装”,但没有任何反应。

解决方案是手动下载并安装官方的Java套件,即在Java for OS X 2013-005中找到。

更新: 如下方评论所述,此同一套件有一个更新版本:

Java for OS X 2014-001

Java for OS X 2014-001(更正上面的错误链接)

  

Java for OS X 2014-001包括安装改进,并取代了以前所有版本的Java for OS X。该套件安装与Java for OS X 2013-005中相同版本的Java 6。


对我来说也一样。另一个选择是从Oracle安装Java。你们觉得哪个更好?似乎Oracle比苹果更新了Java。 - Ngoc Pham
2
但是这个给你的是JDK 6。我们该如何直接使用JDK 6? - Shawn
2
@Shawn Apple禁用了已安装的JDK 7。但是您可以在此处获取一些常见问题解答并进行安装:https://www.java.com/en/download/faq/java_mac.xml,但我没有尝试过。 - Guy
如果您已经安装了Java6和Java7,您可以在shell中选择v6:export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home - Jürgen Strobel
1
为什么要在64位操作系统上使用32位Java?在Mavericks下,64位Java实际上比32位更快。 - MiB
显示剩余5条评论

197
如果您只想安装来自Oracle的最新官方JRE,您可以在那里获取它,安装它,并在终端中导出新的JAVA_HOME。
  • 打开您的终端
  • java -version会给您一个错误和弹出窗口
  • http://www.oracle.com/technetwork/java/javase/downloads/index.html上获取JRE dmg
  • 安装它
  • 在您的终端中,键入:export JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
  • java -version现在会给您java version "1.7.0_45"

这是我发现安装最新JRE的最干净的方法。

您可以将export JAVA_HOME行添加到您的.bashrc中,以使java永久存在于您的终端中:

echo export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\" >> ~/.bashrc

37
我认为将JAVA_HOME定义为指向明显是浏览器插件而不是真正的虚拟机有些可疑。当你安装XCode命令行工具时,会获得获取正确路径的工具/usr/libexec/java_home。请参见https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/java_home.1.html。 - Ilkka
8
@Ilkka - 听起来有些可疑,但实际上这就是Oracle的JRE安装位置。而苹果的Java(仅停留在Java 6)与Oracle的混合并不能像人们希望的那样顺利。 - Orion Edwards
12
我的一个同事(不幸的是,他在这里没有足够的声望来添加评论)想要补充说明,JAVA_HOME设置应该是export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home" - Stephan Windmüller
1
我从Oracle安装了jdk7u45,并在我的bash配置文件中使用export JAVA_HOME=$(/usr/libexec/java_home)。jdk7u45非常好用,包括Java系统首选项面板。现在我要升级到jdk7u51。 - MiB
2
我不得不将 export JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home" 添加到 ~/.profile 而不是 ~/.bashrc 或者 ~/.bash_profile 才能使其工作。 - LarS
显示剩余6条评论

64

下载Java 7 JDK的正确位置是Java SE Downloads

根据我所了解的情况,上面提供的所有其他链接都提供JRE或Java 6下载(顺便说一句,如果您想运行Eclipse或其他IDE,如IntelliJ IDEA,则需要JDK,而不是 JRE)。

关于IntelliJ IDEA - 它仍会要求您安装Java 6,因为它显然需要一个旧的类加载器或其他东西:只需按照对话框弹出时的说明操作,并将JDK 6安装到正确的位置即可。

之后,您需要执行上面答案中提到的sudo ln -snf

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents \
    /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

我也将我的JAVA_HOME设置为指向安装jdk_1.7.0_xx.jdk的路径:

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

然后将其添加到您的PATH中:

export PATH=$JAVA_HOME/bin:$PATH

另一种选择是在苹果那疯狂的超链接迷宫中四处摸索,但老实说,生命太短暂了,无需麻烦。


4
请查看我对另一个回答的评论,这可能是获取路径更好的方法。 - Ilkka
1
由于这个答案有更多的赞,上面答案中的“sudo ln -snf”不再准确。实际上,这是指Mr. Ronald的答案。 - Karthic Raghupathi
@KarthicRaghupathi 我不确定我完全理解这个评论(使用“this”和“that”的方式有些令人困惑),但您仍然需要从/Sytem/Library/etc位置到Oracle安装JVM的实际位置建立符号链接(/Library/etc.),否则应用程序将无法找到Java运行时。 - Marco Massenzio
@Peter - 我不确定那会起作用(事实上,我几乎可以确定它不会):它假设“疯狂的超链接迷宫”已经正确设置,正如我所提到的,人生太短暂了... - Marco Massenzio
@Marco,它确实有效(否则我的安装将无法正常工作),并且实际上我们正在谈论符号文件链接,而不是超链接。 - Peter Gluck
显示剩余5条评论

14

我从Oracle下载并安装了JDK 1.7。在控制台/ 终端中,Java 7可以正常工作。

当我通过GUI启动Java程序(如Eclipse)时,会弹出以下提示:

要打开"Eclipse.app",需要Java SE 6运行时。您现在想要安装吗?

因为我不想安装旧的Java版本,所以使用了以下解决方法:

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

感谢monkehWorks


1
我需要使用 ln -snf,因为我在使用 ln -sf 时遇到了 Operation not permitted 的错误。 - Lars Blumberg
谢谢,我修改了答案并向 ln 命令添加了 -n 选项。 - Mr. Ronald
+1 正是我所需要的。谢谢!在安装后,CLI 获得了对 JDK 7 的引用。但是为了让 GUI 应用程序选择正确的 JDK,这一步是必要的。 - Karthic Raghupathi
很有希望,但对我没用。Android Studio 0.3.2 坚持要“下载Java 6”,而我不会这样做。已安装Oracle Java 7 JDK。 - akauppi
您需要使用64位版本的Eclipse。32位版本需要Apple Java。 - Thorbjørn Ravn Andersen
@Mr.Ronald 对我来说,在/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents之后的路径不存在,这正常吗?我继续进行吗? - tatsu

4

这个错误是因为IntelliJ IDEA的plist文件需要Java版本1.6*,要解决这个问题,将1.6*替换成1.8*即可。

<key>JVMOptions</key>
<dict>
    <key>ClassPath</key>
      ...

    <key>JVMVersion</key>
    <string>1.8*</string>

    <key>MainClass</key>
    <string>com.intellij.idea.Main</string>
    <key>Properties</key>
<dict>

这对我有用。我的问题是当我升级到OSX 10.9时,我仍然可以从终端访问Java和其他所有内容(包括Eclipse正常工作)。只有Android Studio出现了这个错误。 - ucsunil
这在我的OS X 10.10.1上没有起作用,它抱怨没有可用的1.8版本(即使JRE 8已经正确安装)。 - Emmanuel Bourg
你检查过 JAVA_HOME 是否已设置了吗? - Fabio Fumarola

3

3

我们不应该假设苹果当前分发的Java 6版本是不受支持的。 - Graham Perrin
我在“支持”一词中加了引号,以避免尝试解决一个复杂的问题。Oracle对6...的任何支持都会收费,这个支持费用逻辑上也适用于苹果;所以,苹果没有合同就只能自己解决问题了。他们有么有签约,并计划通过补丁来解决MacOSX的问题?合同仍然允许再分配吗?自从苹果的最后一次更新到6以来,Oracle已经发布了2个Java 7更新。历史上,它们倾向于同步发布。或许这是一个假设,但这是一个安全的假设。 - Rondo

3

在 OS X 10.9 上更新 Java SDK 的经验要容易得多。

我从SE下载中下载了最新的Java SE Development Kit 8,并安装了 .dmg 文件。在终端输入 java -version 后显示如下:

java version "1.8.0_11"

Java(TM) SE Runtime Environment (build 1.8.0_11-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)


1
这个错误意味着Java没有正确安装。
1) brew cask install java (No need to install cask separately it comes with brew)

2) java -version

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)

P.S - 什么是brew-cask?Homebrew-Cask是Homebrew的扩展,解决了使用Homebrew安装应用程序后执行额外命令“拖动此图标进行安装”的麻烦。

N.B - 这个问题不是特定于Mavericks,你几乎会在所有OS X中遇到,包括EL Capitan。


1

原文来自OP:

我最终从Java for OS X 2013-005重新安装了它。这解决了这个问题。


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