编者注:这个问题是在2014年提出的,答案可能已经过时了。


我想用最新的JavaFX编程,它需要Java 8。我使用的是IntelliJ 13 CE和Mac OS X 9 Mavericks。我运行了Oracle的Java 8安装程序,文件看起来像是在

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk

但以前的版本是

/System/Library/Java/JavaFrameworks/jdk1.6....

不知道为什么最新的安装程序把这个放在/Library而不是/System/Library(也不知道有什么区别)。但是/usr/libexec/java_home找不到1.8,所以我找到的所有关于如何设置当前java版本的帖子都不起作用。我已经尝试添加了一个符号链接,使它看起来像1.8在/System/Library中…路径,但没有用。/usr/libexec/java_home -V仍然只列出旧的Java 1.6。

讽刺的是,在“系统首选项”下的“Java”控制面板只显示Java 1.8!

为什么Oracle的安装程序不把它放在它真正应该去的地方?我该如何解决这个问题呢?


当前回答

最简单的答案是Zulu java预构建。他们甚至带有一个安装程序,为你做所有的工作。

https://www.azul.com/downloads/?version=java-8-lts&os=macos&package=jdk

其他回答

博士tl;

/Library/Java/JavaVirtualMachines/是要安装JVM的正确位置。这种情况已经持续好几年了。许多年前,其他地点也被使用过,但现在不再使用了。

你可以从几家供应商中选择一个安装程序,在你的Mac上安装Java实现。下载一个安装程序在本地运行,然后丢弃,就像你通常对许多应用程序所做的那样。

你的问题提到了JavaFX/OpenJFX。您可能会发现使用与OpenJFX库绑定的Java实现非常方便,例如BellSoft的LibericaFX或Azul Systems的ZuluFX。

使用安装程序,卢克

对我来说,其他建议Homebrew包管理器的答案似乎有点极端。我相信Homebrew有一些很好的用途。但要简单地运行Java或进行Java编程,安装Homebrew是不必要的额外步骤。为了获得Java而安装Homebrew(包管理器)就像建造一个跑道来停放汽车,而不是使用车道。如果你已经有了,很好,使用它。但是向那些仅仅需要Java的人推荐Homebrew是一个糟糕的建议。

还没有使用Home-brew的用户可以从可信来源下载Mac安装程序。

你有多个来源可以获得一个易于使用的安装程序,将Java安装到你的Mac上。在你的Mac上运行安装程序,就像运行许多其他应用程序一样。

下面是寻找Java 11源代码的流程图,其中一些也提供Java 8。

从供应商那里下载安装程序,比如Adoptium(AdoptOpenJDK.net)。

运行安装程序。

JavaVirtualMachines文件夹现在是正确的

为什么Oracle的安装程序不把它放在它真正应该去的地方?我该如何解决这个问题呢?

没问题。

文件夹/Library/Java/JavaVirtualMachines/是macOS上jvm的新主页。

要安装JVM,请使用下面讨论的安装程序。

要卸载,只需使用Finder从该文件夹中删除JVM。系统将提示您输入系统管理员密码以完成删除。


Java 9 & 10 & 11

早在2010年,苹果与Oracle、IBM、Red Hat、Azul和其他Java供应商一起加入了OpenJDK项目。每个成员都为统一的OpenJDK代码库贡献源代码、测试和反馈。

苹果为其JVM贡献了大部分mac专用代码。现在苹果不再发布自己的mac专用JVM。现在您可以选择JVM供应商,构建来自OpenJDK代码库。

你可以在http://openjdk.java.net上找到源代码

新的发布节奏

请注意,在2017年,Oracle、JCP和OpenJDK已经采用了一种新的快速“发布培训”计划,以可预测的方式定期发布Java版本。

请阅读这篇2018-07 Azul Systems博客文章,Simon Ritter撰写的《消除Java更新困惑》,了解更多细节。

请阅读Java仍然是免费的。

供应商

有关过去和现在JVM实现的详细列表,请参阅Wikipedia的这个页面。

下面是对一些供应商的讨论。有关更多供应商,请参阅上面的流程图

甲骨文JDK

Oracle为包括macOS在内的多个平台提供JDK和JRE安装程序。

在收购Sun的这些年里,Oracle将这两个JVM引擎HotSpot和JRocket最好的部分结合在一起,并将它们合并到OpenJDK项目中,作为他们自己品牌的Java实现的基础。

从2018年开始,他们的新商业计划是在生产中收费提供oracle品牌的Java实现,在开发/测试/演示中免费使用。对以前版本的支持需要付费支持计划。他们已经宣布,他们的品牌发行版将与OpenJDK发行版具有相同的特性。他们甚至将自己的商业插件(如Flight Recorder)捐赠给了OpenJDK项目。

Oracle还发布了一个不支持OpenJDK的版本:http://jdk.java.net/

Oracle开发了一个特殊用途的JDK GraalVM。

祖鲁与叮合一

Azul Systems提供了多种JVM产品。

他们的Zulu系列直接基于OpenJDK,并且是免费的,有可选的付费支持计划。 他们的Zing产品线提供了商业JVM产品,增强了替代技术实现,如专门的垃圾收集器。

他们的两个产品线都提供macOS的安装程序。

我目前在macOS High Sierra上使用Zulu for Java 10.0.1,使用IntelliJ 2018.2和Vaadin 8。我从这个页面下载的。顺便说一句,我在苹果系统首选项应用程序中没有发现任何与java相关的项目。

Adoptium,以前称为AdoptOpenJDK,是由社区领导的构建OpenJDK源代码二进制文件的努力。在Adoptium中,许多其他Java实现供应商都支持这项工作。

您可以选择HotSpot或OpenJ9引擎。 可用于macOS、Linux和Windows以及其他平台的构建。

Eclipse的OpenJ9

OpenJ9项目是JVM引擎的另一种实现,是HotSpot的替代方案。

现在由Eclipse基金会赞助,IBM于2017年捐赠了技术和支持。

对于预构建的二进制文件,它们建议您参考上面提到的AdoptOpenJDK项目。


如何安装

Oracle或Azul提供的安装程序操作起来都非常简单。只要在Mac上运行安装程序,就会出现一个窗口显示安装进度。

完成后,通过以下方法验证JVM安装:

访问/Library/Java/JavaVirtualMachines/文件夹以查看新JVM的项目。 运行一个控制台,如Terminal。然后输入java -version查看JVM的品牌和版本号。

验证成功后,在Finder中卸载.dmg映像。然后丢弃您下载的.dmg文件。

使用Homebrew安装

在2018年10月3日之前,Homebrew Cask中可用的Java版本确实是Oracle JVM。但是现在,它已经更新为OpenJDK。请确保更新Homebrew,然后您将看到可供安装的最新版本。

1. 如果你还没有安装Homebrew。确保已更新:

brew update

2. 添加桶龙头,如果你还没有(或者你在步骤3中没有看到旧的Java版本):

brew tap homebrew/cask-versions

3.对于AdoptOpenJDK版本,添加tap:

brew tap adoptopenjdk/openjdk

这些桶经常更改其Java版本,并且可能还有其他带有额外Java版本的水龙头。

4. 寻找可安装的版本:

brew search java 

或AdoptOpenJDK版本:

brew search jdk     

5. 检查将要安装的版本的详细信息:

brew cask info java

或AdoptOpenJDK版本:

brew cask info adoptopenjdk

6. 安装特定版本的JDK,如java11、adoptopenjdk8,或者当前只安装java或adoptopenjdk。例如:

**brew cask install java**

**brew cask install java8**

**brew cask install java11**

您也可以使用旧版本的完全限定路径:

brew cask install homebrew/cask-versions/java11
brew cask install caskroom/versions/java8

简单的方法

1) brew cask install java

2) java -version

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

p.s. - Cask是Homebrew的扩展,用于管理大型Mac二进制文件和图形应用程序,但使用了Homebrew界面。也可以在Apple StackExchange上看到这个答案。

似乎还没有人提到SDK man (https://sdkman.io/)。

SKD man允许在Mac上安装多个版本的Java,并在这些版本之间轻松切换。更多信息请访问https://sdkman.io/usage。

例如:

$ sdk list java                                                                                                                                                                                                                       
================================================================================
Available Java Versions
================================================================================
   * 12.ea.20-open
     11.0.1-zulu
 > * 11.0.1-open
     10.0.2-zulu
     10.0.2-open
     9.0.7-zulu
     9.0.4-open
     8.0.192-zulu
     8.0.191-oracle
   + 8.0.181-oracle
     7.0.181-zulu
     1.0.0-rc-10-grl
     1.0.0-rc-9-grl
     1.0.0-rc-8-grl


================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

$ sdk install java 8.0.191-oracle

$ sdk use java 8.0.191-oracle

Using java version 8.0.191-oracle in this shell.                                                                                                                                                                                                      

$ java -version                                                                                                                                                                                                                        
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

$ sdk use java 11.0.1-open                                           

Using java version 11.0.1-open in this shell.

$ java -version                                                                                                                                                                                                                        openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
                                                                                                                                                                                                         ```