如何在Mac OSX上使用JDK 7?

109
我想使用WatchService API,这个链接提到了它: http://download.oracle.com/javase/tutorial/essential/io/notification.html
阅读一些资料后我发现WatchService是NIO类的一部分,而NIO类已经被安排在JDK 7中。所以,它处于测试版状态,这没关系。 http://jdk7.java.net/download.html有JDK,我下载并解压缩它,得到一堆文件夹,但不知道该怎么做。
然后,我继续查找,发现一些好心人将JDK 7作为二进制文件创建,这样像我这样的人就可以轻松安装它了。它被称为Open JDK: http://code.google.com/p/openjdk-osx-build/ 所以,我下载了dmg文件并安装了它,然后打开“Java Preference”查看OpenJDK7是否可用。
现在,我觉得我可以开始尝试WatchService API了。从第一个链接中的教程中,作者提供了一个.java文件来进行测试并确保它正在运行。以下是该文件的链接: http://download.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java 因此,我启动Eclipse(实际上我使用STS),创建一个新的Java项目,并在“使用执行环境JRE:”中选择JaveSE-1.7。在src文件夹下,我复制并粘贴了WatchDir.java文件。
但是仍然看到大量的红色波浪线。所有"import.java.nio.*"都是红色的,我不能将其作为Java应用程序运行。
我需要做什么?

你能在控制台上运行和编译它吗? - dmeister
你的意思是运行 $javac WatchDir.java 然后执行 $ Java WatchDir 吗?我会尝试一下。谢谢!虽然我希望它能在 Eclipse IDE 中使用。 - oky_sabeni
1
从今天开始,官方发布了Oracle Java SE 7u4版本。 - mmmmmm
请确保您正在使用64位的Eclipse。在1.7 jvm上,无论使用哪些选项,都无法运行32位的Eclipse。 - tuxSlayer
更新:Java 7现已终止生命周期。要转向Java的长期支持(LTS)版本,请参见:如何在Mac上安装Java 8如何获取macOS的Java 11? - Basil Bourque
16个回答

87

这是我如何在Eclipse中使用1.7版本的方法,希望能对您有所帮助。

  1. http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载最新的OpenJDK 1.7通用版(32/64位)JDK,来自Mac OS/X分支。
  2. 将JDK复制到/Library/Java/JavaVirtualMachines/目录下,与默认的1.6.0版本并列排放。
  3. 在Eclipse中选择“偏好设置(Preferences)”,然后找到“Java > 已安装的JREs”选项卡,在列表中点击“添加(Add)”,选择类型为“MacOS X VM”的新JRE,将home设置为/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home,并将名称设为“Java SE 7 (OpenJDK)”。
  4. 点击“完成(Finish)”按钮。
  5. 将新添加的JRE设置为默认JRE。

就是这样了 :)


谢谢,我的Eclipse完全卡住了...所以我尝试使用SDK 1.7,结果完美解决!:=) - cV2
1
该项目(openjdk-osx-build)已经关闭,不再提供任何下载。 - aroth
第二步只需运行下载的 jdk-7u40-macosx-x64.dmg 文件,它将自动添加文件到路径中。 - Michal
当将已安装的JRE添加到Eclipse时,Eclipse也可以“搜索”已安装的JRE。这就是我找到现有的1.7 JDK安装的方法。 - jvriesem
请注意,Oracle JDK 1.7安装程序将为您将VM放置在/Library/Java/JavaVirtualMachines/中(2014年3月)。 - Chris Thorne
java.io.nullPointerException访问被拒绝错误也可以通过这种方式解决,对于任何搜索词。 - Stephen J

62

Oracle发布了适用于OS X的JDK 7


12
请注意,为了让应用程序使用Oracle的Java 1.7而不是苹果的Java 1.6,我必须运行/Library/Java/JavaVirtualMachines/1.7.0.jdk并将“Java SE 7”拖到“常规”选项卡中的列表顶部。这也会使终端中的javac指向Java 1.7版本。 - sschuberth
2
Oracle的JDK7在Snow Leopard上无法工作。它只支持Lion系统。 - Sanghyun Lee
@Sangdol - 是的,Oracle的Java实现仅在Lion及更高版本上运行。正如我在回答这个问题时所指出的那样。 - Basil Bourque
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html - tarabyte
Oracle不再提供Java 7的链接,至少没有在其付费客户支持网络之外提供。我使用了@abe312提供的Cask解决方案,并成功安装了Java 7。 - Tim Dean
显示剩余5条评论

56

Java 9, 10, 11

多年前,苹果加入了OpenJDK项目,并将其原本专有的macOS特定JVM代码免费开源。苹果停止了他们自己品牌的JVM/JDK的分发,转而依赖于Oracle的品牌发布来包含macOS版本。

Oracle最近宣布,他们将推出Oracle品牌的JVM版本,与OpenJDK项目基本相同的代码库。该公司甚至将其以前的商业工具Flight RecorderMission Control捐赠给了OpenJDK项目。这是转向新的快速“发布列车”计划的一部分,用于可预测地安排Java和OpenJDK的版本。值得注意的是,免费公共更新的周期现在缩短了。请参见此2017-09公告Mark Reinhold的此帖子
由于这一切,Java的macOS用户可以选择不同的Java实现供应商。目前,至少有三个来源是基于OpenJDK的macOS版本。
  • Oracle发布 JDK 和 JRE 的更新版本,可选择付费支持。
  • Azul Systems发布
    • 免费 JVM 系列 Zulu,可选择付费支持。
    • 商业 JVM 系列 Zing,具有特殊功能,如备用垃圾收集器。
  • OpenJDK源代码,自行编译和安装(对于大多数人来说可能不实际)。
与此同时,IBM向Eclipse Foundation捐赠了一份JVM代码,现在存放在OpenJ9项目中。我想知道他们是否也会支持macOS版本,但现在还为时过早。
就我个人而言,我目前正在使用Azul的Zulu Java 10.0.1版本,在macOS High Sierra上成功地使用IntelliJ 2018.2来生产基于Java的Web应用程序,使用Vaadin

安装/卸载

Oracle和Azul都提供非常易于使用的安装程序,以在您的Mac上安装JVM/JDK。使用Terminal.app(或等效工具)输入并运行以下内容,以验证您的安装:
java -version

您可以在驱动器的根目录(而不是您的主文件夹)中找到Java安装程序:

/Library/Java/JavaVirtualMachines

每个供应商的每个版本都在那里以标记的嵌套文件夹形式出现。您可以通过删除该版本的嵌套文件夹并在提示时提供系统密码来简单地删除任何安装。

Java 8

您可以下载Java开发工具包(JDK),适用于Java 8支持的Mac OS X版本:

  • Mountain Lion(10.8.3+)
  • Mavericks(10.9)
  • Yosemite(10.10)
  • El Capitan(10.11)

您安装的每个JVM版本都可以在此处找到:

/Library/Java/JavaVirtualMachines

如需更多说明和常见问题解答,请参见此 Oracle 指南

Java 7

自从更新4以来,每个Java 7版本都已经准备好了 Mac 版本,并与其他平台一起发布。在 Lion (10.7.3+)、Mountain Lion (10.8.3+) 和 Mavericks (10.9.x) 上运行需要64位硬件的 Mac。

2012-04-26,Oracle 宣布正式发布适用于 Mac OS X (Lion) 的 Java SE 7 Update 4 JDK。无需再使用本页中讨论的技巧。

根据这些说明进行安装即可。

  1. 从Oracle网站的the usual place下载。
  2. 安装DMG。
  3. 运行安装程序。

此版本有一些限制,最显著的是不支持Java Web Start和Web浏览器的Java插件。预计今年稍后会提供此支持。

安装后,请阅读JDK for Mac ReadMe。最重要的是,如果您想将Java 7设置为默认值,请在实用程序文件夹中找到Java Preferences应用程序并将其拖到列表顶部。

Mac OS X轻松支持同时使用多个JVM。现在每个都可以在此处找到:

/Library/Java/JavaVirtualMachines

恭喜苹果和Oracle团队取得的成就。这个极客看到Mac OS X被列为“已认证系统配置”感到兴奋。
提示:在仅安装Java 7的Mac上启动Eclipse,请打开名为eclipse别名文件,而不是名为Eclipse.app的文件。

Java 6

苹果继续为所有版本的Mac OS X直至Mountain Lion提供最新的Java 6实现。
如果您需要使用Java,例如在Terminal.app中输入“java -version”,会出现一个对话框询问是否为您安装Java。如果您接受,安装过程类似于其他来自Apple的“软件更新”。
您将在此位置找到已安装的Java,与Java 7和8不同:
/System/Library/Java/JavaVirtualMachines

Java 6已经在2013-02时与Oracle达到了终止支持(除非您与Oracle签订了商业支持协议)。因此,您应该转向Java 7或8。

测试新版本

在Terminal.app中,输入java -version以验证当前默认版本。

删除旧版本

安装新版本后,您可能希望访问上面提到的文件夹来删除旧版本。将文件夹移动到"垃圾箱"并提供系统密码以完成移动。


顺便提一下,苹果公司为开发者在OS X上涉及Java的技术问题提供了邮件列表

4
(a)请查看 /Library/Java/JavaVirtualMachines 目录(而不是 /System)。 (b)您是否阅读了Oracle的安装文档,ReadMe并按照我上面回答中描述的设置了 Preferences - Basil Bourque
@aBasilBourque - (a)是的,那里也没有。 (b)是的;我在Application/Utilities中没有看到“Java Preferences”应用程序。但无论如何,我找到了问题所在。我试图从[java.com(约50MB)](http://www.java.com/en/download/mac_download.jsp?locale=en)安装Java 7软件包。当我去[Oracle(约150MB)](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)下载时,*它*正确地安装。但仍然没有“Java Preferences”应用程序。 - aroth
1
使用Java 7 r21,我可以看到/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/。现在可以通过系统偏好设置(OSX 10.8.3)访问Java控制面板。 - Sofi Software LLC
我建议在帖子中澄清,/Library/Java/JavaVirtualMachines是一个新位置,不要与安装1.6 JDK的/System/Library/Java/JavaVirtualMachines混淆。在阅读评论之前,我没有注意到这一点。 - undefined
@aroth 是的,我曾经看到过一些奇怪的行为,这是由于Oracle安装程序的不同版本。虽然我没有记录下来,但似乎安装位置会有所不同。我总是需要四处寻找并删除旧版本。使用Java自己的更新程序几乎从来没有成功过,所以我手动删除旧的JVM,并下载最新的安装程序进行全新安装。 - Basil Bourque
显示剩余4条评论

17
在Mac上安装Java 7的简单方法是使用Homebrew,这要归功于Homebrew Cask插件(现在默认已安装)。
运行以下命令以安装Java 7:
brew cask install caskroom/versions/java7

错误:caskroom/versions/java7 没有可用的 Cask。 - jrochkind
@jrochkind 也许你的 caskroom/versions 已经过时了?它肯定在这里:https://github.com/caskroom/homebrew-versions/blob/master/Casks/java7.rb - Andrew
@jrochkind 在运行安装命令之前,请尝试运行 brew tap caskroom/versions - Andrew
@jrochkind 如果这样不起作用,请查阅Cask文档或提交问题:https://github.com/caskroom/homebrew-cask - Andrew

14

获取 Cask

brew tap caskroom/cask

安装Java7:
brew tap caskroom/versions
brew cask install java7

我在Oracle网站上找Java7的下载链接时遇到了困难,因为他们只是“推荐”Java8。

2018年1月编辑 (由Ankur指出):

abigailbunyanGitHub上的引用:

[U]se zulu7 cask. Zulu是由Azul Systems生产的OpenJDK的认证版本,应该会持续很长时间(他们甚至还提供JDK6版本)。

brew cask install caskroom/versions/zulu7

这个问题的被接受答案已经过时了。这似乎是如今安装Java 7的最佳方法。 - Tim Dean
这个 Cask 已经被移除了(参见:https://github.com/caskroom/homebrew-versions/pull/3914)。建议使用 Zulu7 作为替代方案。 - Ankur

9

我知道有些人可能会因为我重新打开旧帖子而打我,但如果你这么想的话就这样做吧,我只希望这可以帮助其他想在Mac OS上设置JDK 7(使用IntelliJ)的人。

我为使其在我的机器上正常工作所做的是:

  • 按照Oracle JDK7 Mac OS X Port中的一般安装说明进行操作
  • 在IntelliJ中打开/创建新项目,以便您可以添加新的SDK(File>Project Structure)
  • 选择平台设置>SDKs,按“+”(加号)符号添加新的SDK
  • 选择JSDK并导航到/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home。 不要将其与/Users/YOUR_USERNAME/Library/Java/弄混。 这将链接4个来自“lib”目录的JAR文件(dt.jar,jconsole.jar,sa-jdi.jar和tools.jar)
  • 您还需要添加来自/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home/jre/lib的JAR文件(charsets.jar,jce.jar,JObjC.jar,jsse.jar,management-agent.jar,resources.jar和rt.jar)

7
在从Oracle安装了1.7 JDK之后,我修改了我的bash脚本以添加以下内容:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home

然后运行java -version,显示正确的版本。


6
可能您仍需要将JDK添加到Eclipse(STS)中。仅因系统上已有JDK并不意味着Eclipse知道该从哪里查找。
请前往“首选项>Java>已安装的JRE”页面。
如果没有1.7 JDK的条目,请添加它。您需要指定Eclipse中1.7 JDK的安装位置。
如果Eclipse找不到与1.7兼容的JRE,则可能会使用默认JRE,而默认JRE可能仍指向Java 1.6,这会导致出现红色的波浪线。

好的,很不错!但我需要更进一步的指导。我进入“已安装的JRE”->“添加”,并指向.../jdk1.7.0/jre,它找到了一堆JAR文件。我点击“完成”。高兴地尝试构建,但现在它显示.../jdk1.7.0/jre/bin/java: 无法执行二进制文件。这是什么意思? - oky_sabeni
我不是特别确定。你可以尝试将Eclipse指向基本JDK目录,而不是JRE目录。我想那就是我在Windows上通常的做法,尽管我从未切换Mac上的默认JDK。如果那行不通,你可以尝试安装另一个JDK 7的分布——openjdk-osx-build网站上有几个不同的版本可用,也许你下载了一个与你的系统不兼容的版本? - Jon Quarfoth
我试过了。它给了我一个错误,“目标不是JDK根目录。未找到系统库”。 - oky_sabeni

3

由于近期 brew 发生了一些变化,我需要对 @abe312 的回答进行调整。

我安装了 zulu7 并通过以下命令设置了 JAVA_HOME:

brew install --cask homebrew/cask-versions/zulu7
echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-7.jdk/Contents/Home" >> ~/.zshrc

安装zulu7时,我需要输入密码。如果使用不同的shell,您可能需要修改最后一个命令。


2

我以前用过NetBeans,我会试一试。谢谢提供链接。 - oky_sabeni

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