如何在Mac上安装Java 8

1280

编辑说明:本问题是在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的安装程序不将其放置在真正的位置?如何解决此问题?


11
它实际上被安装在了 "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/" 这个位置。之前的位置是苹果提供的 Java 版本的安装路径,但由于苹果不再提供 Java 了,因此安装路径也发生了改变。 - awksp
类似问题:如何在Java 11中使用JDK而不使用JRE - Basil Bourque
安装OpenJDK@8, 请使用Brew命令。 - Rishabh Agarwal
3
brew install --cask temurin8 # Temurin是AdoptOpenJDK的官方继任者 - Simon B.
2022年8月更新:使用“brew install --build-from-source openjdk@8”进行安装。 - aminbadri7
截至2022年9月:OpenJDK Java 8安装程序可从Eclipse Temurin项目获取-https://adoptium.net/temurin/releases/?version=8。这不需要安装homebrew。 - Thorbjørn Ravn Andersen
35个回答

2260

Oracle在Java的安装和配置方面记录不佳,但使用Homebrew,可以轻松安装最新的OpenJDK(Java 14):

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew install openjdk

brew install --cask adoptopenjdk8

对于很多使用老版本(通常为Java 8)的用例,AdoptOpenJDK 项目提供了一种额外步骤的解决方法。

brew tap adoptopenjdk/openjdk
brew install --cask adoptopenjdk8

对于现有的 Homebrew 用户,可能会遇到 Error: Cask adoptopenjdk8 exists in multiple taps 的错误,这是因为之前使用了不同的临时解决方案。可以通过完全指定位置来解决该问题,方法是使用 brew install --cask adoptopenjdk/openjdk/adoptopenjdk8 命令。


104
截至2015年12月,手动安装 Cask 已不再必要,因为它已成为 Homebrew 安装的一部分。因此,在通过 brew update 更新 Homebrew 后,您可以使用 brew cask 命令。 - davetw12
80
谢谢,令人惊讶的是,使用“官方”链接/文档安装Java的过程是多么糟糕。 - enderland
16
我刚在我的El Capitan Mac上运行了命令brew cask install java,它正在下载jdk-8u112-macosx-x64.dmg。 - Calrion
58
错误:Cask 'java8' 不可用:不存在该名称的 Cask。 - Elderry
103
目前的解决方法是运行命令 brew tap homebrew/cask-versions,然后使用命令 brew cask install homebrew/cask-versions/adoptopenjdk8 安装 adoptopenjdk8 版本。 - Sean Breckenridge
显示剩余34条评论

871

注意:Oracle Java 8/9/10已不再公开提供下载(许可证变更)。

首先从终端安装更新brew

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew tap homebrew/cask-versions

brew update

2019年6月更新内容

安装AdoptOpenJDK的JDK:

brew tap adoptopenjdk/openjdk

brew install --cask adoptopenjdk8
brew install --cask adoptopenjdk9
brew install --cask adoptopenjdk10
brew install --cask adoptopenjdk11

旧版

Java 8:

brew install --cask java8

Java最新版本:

brew install --cask java

3
值得注意的是,这种方法在我使用 Mavericks 系统时没有起作用,因此它不能回答提问者的问题,但是在我使用 Captain 系统时有效,因此可以作为回答来使用。 - Tommy
3
我在新的OS X El Capitan机器上安装了最新版的Homebrew,不需要运行上面回答中的brew tap命令。第一个和第三个命令已经足够了。 - Adil Hussain
22
错误:'java8' Cask 不可用:不存在此名称的 Cask。 - user924
8
请使用命令 brew cask install adoptopenjdk/openjdk/adoptopenjdk8 安装,因为 Cask adoptopenjdk8 存在于两个源中:caskroom/versions/adoptopenjdk8 和 adoptopenjdk/openjdk/adoptopenjdk8。 - roottraveller
5
在我的 Hi Sierra 10.13.6 上,brew tap homebrew/cask-versionsbrew cask install adoptopenjdk8 可以正常使用。 - xjlin0
显示剩余24条评论

166

Java 8已不再提供Homebrew安装方式,brew install java8已经无法使用。

相反,请使用以下命令:

brew cask install adoptopenjdk/openjdk/adoptopenjdk8
请查看此提交以了解技术细节。
请注意,您可能会看到与Cask adoptopenjdk8 exists in multiple taps相关的问题。这是一个已知问题,目前正在处理中,您可以在此处查看:https://github.com/AdoptOpenJDK/homebrew-openjdk/issues/106 对于那些不想深入了解详情的人,这是一个摘要:
# To install JDK8
brew cask install adoptopenjdk/openjdk/adoptopenjdk8

# To be able to safely run 'brew cleanup'
brew untap adoptopenjdk/openjdk
brew untap caskroom/versions
brew cleanup

3
使用 AdoptOpenJDK/openjdk 和使用 homebrew/cask-versions/adoptopenjdk8 有什么区别? - Sean Breckenridge
1
@SeanBreckenridge - HomeBrew团队正在处理此事,目前看来将使用AdoptOpenJDK,但仍存在一些不确定性,请参见当前打开的问题https://github.com/AdoptOpenJDK/homebrew-openjdk/issues/106以获取详细信息! - Dave Kerr
1
brew cask install homebrew/cask-versions/adoptopenjdk8 对我有效。 - protoEvangelion
1
这对我有用 brew install --cask adoptopenjdk/openjdk/adoptopenjdk8 - Shams
1
在 MacOS Monterey, 12.1 上运行 brew install --cask adoptopenjdk/openjdk/adoptopenjdk8 是有效的。但是,cask 不再是 brew 命令,请参考这里 https://dev59.com/B1EG5IYBdhLWcg3wbNIC。 - vpap
显示剩余5条评论

153

到了2023年,你只需要使用brew

brew install openjdk@8

也许你需要更新PATH环境变量:

export PATH="/usr/local/opt/openjdk@8/bin:$PATH"

…如果你想为未来做好准备,建议尝试使用sdkman,比brew更好。

curl -s "https://get.sdkman.io" | bash

然后打开一个新的终端,尝试使用list命令查看你可以安装哪些内容 ;-)

sdk list java 

写作时安装Java 8,您可以使用:

sdk install java 8.0.322-tem 

注意:将安装命令更新为与运行 sdk list java 显示的某些现有标识符匹配。


1
酿造方法起作用了,还必须更新路径变量。 - Shivam
1
安装后需要运行 export PATH="/usr/local/opt/openjdk@8/bin:$PATH"。使用 brew list 命令来安装软件包。使用 brew info $package_name 命令来获取软件包的信息。 - sourav pandit
1
as simple as that! - Hila Grossbard
2
必须执行 brew install --build-from-source openjdk@8 才能使其正常工作。 - Rogier de Ruijter
3
sdkman 是一个福音。 - Tamim Attafi
显示剩余9条评论

130

我刚在我的MBP上做了这个,不得不使用

$ brew tap homebrew/cask-versions
$ brew cask install java8

为了安装Java8。


10
它帮助我安装特定版本的Java。现在Java 9已经发布了,运行“brew cask install java”将安装Java 9。“brew cask install java8”对我来说无法工作,直到我运行“brew tap caskroom/versions”。 - interrupt
6
是的,在安装Java8之前需要执行“brew tap caskroom/versions”。 - hendrix
12
或者只需运行 brew install homebrew/cask-versions/java8 就行了! - Naruto Sempai
5
由于 Oracle 许可证的更改,现在无法使用 Brew 安装 Java8。Java8 不再提供公共下载。 - Marcelo Xavier
3
错误:Cask 'java8' 不可用:没有此名称的 Cask 存在。 - user924
显示剩余6条评论

88

假定:您使用的是 Mac 机器,并且已经安装了 Homebrew。

安装 cask(如果您的 Homebrew 版本高于0.9.5,则已经包含了cask,因此可以跳过此步骤):

$ brew tap caskroom/cask
$ brew tap caskroom/versions

安装最新的Java:

$ brew cask install java
安装Java 8:

要安装Java 8:

$ brew cask install adoptopenjdk/openjdk/adoptopenjdk8
如果您想安装/管理多个版本,可以使用“jenv”:
安装和配置jenv:
$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
将已安装的Java添加到jenv中:
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/Contents/Home

查看所有已安装的Java:

$ jenv versions

以上命令将给出已安装的Java列表:

* system (set by /Users/lyncean/.jenv/version)
1.8
1.8.0.202-ea
oracle64-1.8.0.202-ea

配置您想要使用的Java版本:

$ jenv global oracle64-1.6.0.39

设置JAVA_HOME的方法:

$ jenv enable-plugin export

4
最佳方案!谢谢! - viktorianer
1
谢谢。简洁明了的解决方案是:使用另一个有用的工具“jenv”,它很方便,而且大多数其他答案都没有提到。在2020年打包Scala(2.12/2.13)代码时非常有帮助。 - emllnd
1
运行得非常好,使用brew cask install adoptopenjdk/openjdk/adoptopenjdk8。 - jeadonara
1
这确实是最佳答案!非常适合需要管理多个 Java 版本的人(像我)。 - Ankit Khettry
2022年:Mac 12.x: brew cask不再是brew命令。请改用brew <command> --caskbrew install adoptopenjdk/openjdk/adoptopenjdk8 --cask - RRy

70

我最近开始喜欢在本地计算机上使用Docker来运行应用程序的选项。您可以在官方JDK容器中简单地运行您的应用程序,这意味着您不必担心在本地机器上设置所有内容(或担心为不同应用程序运行多个不同版本的JDK等问题)。

虽然这可能无法帮助您解决当前的安装问题,但它是一种解决方案,意味着您可以回避与尝试在开发机器上正确运行Java相关的问题!

好处如下:

  1. 无需在本地计算机上设置任何Java版本(您只需在从Docker Hub拉取的容器中运行Java即可)
  2. 通过简单地更改容器上的标签,非常容易切换到不同版本的Java。
  3. 项目依赖项安装在容器内 - 因此,如果您搞砸了配置,只需销毁容器并重新开始即可。

一个非常简单的示例:

创建一个 Dockerfile

FROM java:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
  • 这里我们指定了运行版本为8的SDK的Java容器 (java:8 - 如果要使用Java 7,只需指定: java:7)
  • 我们将本地目录映射到容器内的目录/usr/src/myapp

创建一个docker-compose.yml文件:

version: "2"

services:
  java:
    build: .
    volumes:
      - .:/usr/src/myapp

现在,假设我们有这个Java文件:

HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {        
        System.out.println("Hello, World");
    }
}

因此,我们有以下的文件结构:

.
|_ Dockerfile
|_ docker-compose.yml
|_ HelloWorld.java

你可以做各种Java事情,例如:

编译:

docker-compose run --rm java javac HelloWorld.java 
  • 请注意,HelloWorld.class文件会出现在您当前的目录下(这是因为我们将当前目录映射到容器内我们的代码所在的位置)。

运行:

docker-compose run --rm java java HelloWorld 
  • 注意:第一次运行此命令将获取图像等,这需要一段时间 - 这只会在第一次发生
  • docker-compose run - 从容器中运行命令
  • -rm 告诉docker在命令完成后删除容器
  • java 是服务/容器的名称(来自我们的docker-compose文件),该命令将针对它运行
  • 行的其余部分是要在容器内运行的命令。

这是一种非常酷的处理不同应用程序运行不同版本Java的方式,而不会完全搞乱您的本地设置 :).

这里有一个稍微复杂一些的示例,其中包含Maven和一个简单的Spring应用程序

免责声明:


3
使用Docker的好例子,不确定为什么之前你被踩了。 - Andrew
35
我想这个回答被踩的原因是它没有回答如何在OS X/MacOS上运行Java的问题。用“只需在平台Y上使用虚拟机/衬垫程序”来回答“我该如何在平台X上做这件事”并不具有建设性。 - whitfin
1
特别适用于本地Java开发(例如使用SWIG、JNI和LIBRARY_PATH) - Mizux

29

简述

/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。

Flowchart guiding you in choosing a vendor for a Java 11 implementation

从像Adoptium(AdoptOpenJDK.net)这样的供应商下载安装程序。

Download page at AdoptOpenJDK.net

运行安装程序。

screenshot of installer running

JavaVirtualMachines文件夹现在已正确安置

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

没问题。

/Library/Java/JavaVirtualMachines/文件夹是macOSJVM的新家。

screenshot of the folder "/Library/Java/JavaVirtualMachines/" in the Finder

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

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


Java 9 & 10 & 11

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

苹果为其JVM贡献了大部分Mac特定的代码。现在苹果不再发布自己的Mac特定JVM。你现在可以选择JVM供应商,这些构建来自OpenJDK代码库。

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

新版本发布节奏

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

阅读2018年7月Azul Systems博客文章,了解更多细节,消除Java更新混淆by Simon Ritter

还要阅读Java仍然是免费的

供应商

有关过去和现在的JVM实现的相当详尽的列表,请参见Wikipedia上的此页面

这里讨论了一些供应商。有关更多供应商,请参见上面的流程图

Oracle JDK

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

自收购Sun以来的多年间,Oracle已将两个JVM引擎HotSpotJRocket的最佳部分结合起来,并将它们合并到OpenJDK项目中,用作他们自己品牌的Java实现的基础。

他们的新业务计划,截至2018年,是为在生产中使用的Oracle品牌的Java实现收费,在开发/测试/演示中免费提供。对于之前的版本提供付费支持计划。他们宣布他们的品牌发布将与OpenJDK发布具有相同的功能。他们甚至将商业附加组件(如Flight Recorder)捐赠给了OpenJDK项目。
Oracle还发布了不带支持的OpenJDK版本: http://jdk.java.net/ Oracle生产了一个特殊目的的JDK,GraalVM

Azul & Zing by Azul

Azul Systems 提供各种JVM产品。

  • 他们的Zulu系列直接基于OpenJDK,并可免费获得可选的付费支持计划。
  • 他们的Zing系列提供增强型商业JVM产品,采用备用技术实现,例如专用garbage-collector
两条产品线都提供了macOS的安装程序。
我目前在macOS High Sierra上使用IntelliJ 2018.2和Vaadin 8,使用的是Java 10.0.1的Zulu版本,从这个页面下载。顺便说一下,在苹果的系统偏好设置应用程序中,我没有找到任何与Java相关的项目安装。

Adoptium

Adoptium,以前被称为AdoptOpenJDK,是一个社区主导的努力,旨在构建OpenJDK源代码的二进制文件。许多其他Java实现的供应商支持Adoptium的工作。

  • 可以选择使用HotSpotOpenJ9引擎。
  • 适用于macOS、Linux和Windows等其他平台。

由Eclipse提供的OpenJ9

OpenJ9 项目是 JVM 引擎的另一种实现,是 HotSpot 的替代品。
现在由 Eclipse Foundation 赞助,并在 2017 年接受 IBM 的技术和支持捐赠。
对于预构建的二进制文件,他们会引用上述提到的 AdoptOpenJDK 项目。

Motivations in choosing a vendor for Java


如何安装

由Oracle或Azul提供的安装程序都非常简单易用。只需在Mac上运行安装程序应用程序。窗口会显示安装进度。

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

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

验证成功后,在Finder中卸载.dmg映像。然后将您下载的.dmg文件放入废纸篓中。


9
这个回答令人不悦。只需使用 "brew cask install adoptopenjdk8" 命令安装 AdoptOpenJDK8。 - Stevey
2
@user3562927 仅为获得Java而安装Homebrew(软件包管理器)就像建造跑道来停放你的汽车,而不是直接使用你的车道。如果你已经安装了它,那很好,可以使用它。但向那些只需要Java的人建议Homebrew是不好的建议。显然,您不是唯一一个容易受到冒犯的Homebrew粉丝,因为这个回答收到了5个没有解释的负投票。但我仍然坚持我的建议。 - Basil Bourque
@BasilBourque,brew 比你想象的更有用。它可以更轻松地安装许多软件,你的回答就是证明。:-/ - Daniel W.
2
@DanielW。这个问题并没有要求Brew的解决方案,甚至没有提到Brew。这个问题是关于安装Java的。在安装Java时有几个重要的问题需要考虑,我试图涵盖这些问题。显然我冒犯了一些Brew的粉丝——这不是我的意图。我的意图是针对手头的问题进行有针对性的回答,这是Stack Overflow的惯例。我坚持我的立场:仅仅为了安装Java而安装Brew是过度的。此外,使用Brew安装Java将限制选择并忽略各种Java实现时可能出现的问题。 - Basil Bourque

25

我遇到了同样的问题需要解决,因为我需要安装JDK8才能运行Android SDK管理器(因为似乎与JDK9不兼容)。 然而,我会告诉你如何在Mac(Sierra)上解决所有问题。

首先,您需要使用cask和jenv的brew

  1. 您可以在此处找到有用的指南,Homebrew Cask Installation Guide。 记得在终端中运行以下命令来打开“caskroom/versions”: brew tap caskroom/versions
  2. 之后,使用以下命令安装jenv: brew install jenv
  3. 使用cask安装任何版本 brew cask install java8 (或者如果您想要安装最新版本jdk9,则为java7java
  4. 最后一步是配置要运行的版本(并让jenv管理您的JAVA_HOME) jenv versions以列出计算机上安装的所有版本,然后使用jenv global [JDK_NAME_OF_LIST]激活您想要的版本

您可以在此Github Gist brew-java-and-jenv.md、此博客 在Mac上安装多个JDKJenv网站找到其他有用的信息。


jenv非常简单且超级有用。我有多个项目需要Java 8和11。 - Nikhil Sahu

23

如果您在计算机上安装了多个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文件夹位于不同位置,则该过程类似。


1
为什么不为不同版本制作别名,比如alias java8=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home/bin/java - cglacet

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