如何在允许版本切换的 Mac OSX 上安装 Java?

新手上路,请多包涵

我想在 Mac OSX 上安装 OpenJDK Java 并让它与其他 JDK 一起工作,因为它是一个较新的版本。目前,我下载了 tar.gz 并将其放在我的路径中,但这很难维护。

我发现的唯一其他自动执行更多操作的安装是通过 Homebrew cask 安装。它看起来也只有当前版本:

 brew cask info java

显示:

爪哇:13,33:5b8a42f3905b406298b72d750b6919f6

https://openjdk.java.net/

所以我可以从那里安装它,但是然后呢?我只坚持新版本吗?

原文由 Jayson Minard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

注意: 这些解决方案适用于各种 Java 版本,包括 Java 8 到 Java 18(LTS 版本)。这包括来自 OpenJDK、Oracle、IBM、Azul、Amazon Correto、Graal 等的替代 JDK。轻松使用 Java 7、Java 8、Java 9、Java 10、Java 11、Java 12、Java 13、Java 14、Java 15、Java 16、Java 17 甚至 Java 18!

对于如何进行安装以及管理 JDK 切换,您有几个选项。可以通过 Homebrew、 SDKMANasdfJabba 或手动安装来完成安装。可以通过 JEnvSDKMANasdfJabba 或通过设置手动完成切换 JAVA_HOME 。所有这些都在下面描述。


TL;DR - 首选安装方法

您可以使用您喜欢的任何方法安装 Java,包括 SDKMAN、 asdf 、Homebrew 或手动安装 tar.gz 文件。手动安装的优点是 JDK 的位置可以放置在 Mac OSX 的标准化位置。

但是,还有一些更简单的选项,例如 SDKMANasdf ,它们也可以为 JVM 安装其他重要且常用的工具。此处描述了这两个主要选项。

使用 SDKMAN 安装和切换版本

SDKMAN 有点不同,它同时处理安装和切换。 SDKMAN 还将安装的 JDK 放入其自己的目录树中,通常为 ~/.sdkman/candidates/java 。 SDKMAN 允许设置全局默认版本和特定于当前 shell 的版本。

  1. https://sdkman.io/install 安装 SDKMAN

  2. 列出可用的 Java 版本以确保您知道版本 ID

    sdk list java

  1. 安装其中一个版本,例如 Java 17 LTS:
    sdk install java 17-open

或java 18:

    sdk install java 18-open

  1. 将 Java 17 设为默认版本:
    sdk default java 17-open

或者为当前终端会话切换到 17:

    sdk use java 17-open

当您使用 list 命令列出可供安装的版本时,您将看到各种各样的 Java 发行版:

 sdk list java

并安装其他版本,例如来自 Amazon 的 JDK 11:

 sdk install java 11.0.14.10.1-amzn

SDKMAN 可以使用以前安装的现有版本。只需进行本地安装,提供您自己的版本标签和 JDK 的位置:

 sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

并自由使用:

 sdk use java my-local-13

当您更改版本时,SDKMAN 会自动为您管理 PATHJAVA_HOME 。作为说明,它将Java版本安装到 ~/.sdkman/candidates/java/

SDKMAN 使用指南 以及它可以安装和管理 的其他 SDK 中提供了更多信息。


使用“ asdf ”安装和切换版本

asdf 是一个版本管理器,支持安装和管理大多数语言、框架和开发人员/devops 工具。它具有特定于语言的插件,包括一个 用于 Java 的 插件。

  1. 首先,通过 https://asdf-vm.com/guide/getting-started.html 安装 asdf (阅读此处以正确设置您的 shell),或者更简单:
    brew reinstall asdf

阅读文档 以正确设置您的 shell,但如果您使用 Homebrew 中的 asdf 和 ZSH,您可以执行以下命令来完成设置:

    echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc

  1. 然后通过 https://github.com/halcyon/asdf-java 安装 Java 插件
   asdf plugin add java

并在继续之前 阅读正确设置 shell 的文档。基本上它说将以下内容添加到您的 ~/.zshrc 文件中(假设您没有使用另一个 shell):

    . ~/.asdf/plugins/java/set-java-home.zsh

  1. 现在列出 Java 版本:
    asdf list-all java

  1. 安装您喜欢的风味和版本:
    asdf install java openjdk-17

或安装最新的:

    asdf install java latest

其他重要的命令是…

  • 列出您安装的版本:
   asdf list java

  • 设置全局 Java 版本:
   asdf global java openjdk-17

  • 为目录设置本地 Java 版本:
   asdf local java openjdk-17

就这么容易! asdf 将在您更改版本时自动为您管理 PATH 和 JAVA_HOME。作为说明, asdf 将 Java 版本安装到 ~/.asdf/installs/java

来自存储库页面的 asdf 有其他语言和插件: https ://github.com/asdf-vm/asdf-plugins


其他安装方法

使用 Homebrew 安装

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

  1. 如果您还没有 安装 Homebrew 。确保它已更新:
     brew update

  1. 添加木桶水龙头:
     brew tap homebrew/cask-versions

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

  1. 寻找可安装的版本:
     brew search java

或者对于 Eclipse Temurin 版本:

     brew search temurin

  1. 检查将安装的版本的详细信息:
     brew info java

或者对于 Temurin 版本:

     brew info temurin

  1. Install a specific version of the JDK such as java11 , temurin8 , temurin11 , temurin17 , or just javatemurin 该发行版的最新版本。例如:
     brew install java

    brew install --cask temurin

这些将被安装到 /Library/Java/JavaVirtualMachines/ 这是 Mac OSX 上预期的传统位置。在安装过程结束时可能会报告其他步骤以使 JDK 处于活动状态。

从 OpenJDK 下载页面手动安装:

如果您需要任何 Java 版本,这是一个很好的地方。

  1. http://jdk.java.net/ 下载适用于 Mac OSX 的 OpenJDK(例如 Java 17Java 18

  2. 解压缩 OpenJDK tar,并将生成的文件夹(即 jdk-17.jdk )放入 /Library/Java/JavaVirtualMachines/ 文件夹,因为这是 JDK 安装的标准和预期位置。您也可以安装在现实中您想要的任何位置。

  3. JAVA_HOME 环境变量设置为指向您取消归档 JDK 的方向。

有关详细信息,请参阅 特定于手动安装 的答案。另请参阅“手动切换版本”下方的部分,了解有关如何管理多个手动安装的更多信息。

其他安装选项:

OpenJDK 的其他一些风格是:

Azul Systems Java Zulu 认证的 OpenJDK 版本可以按照 其网站上的说明 进行安装。

Zulu® 是经过认证的 OpenJDK 版本,完全符合 Java SE 标准。 Zulu 是 100% 开源且可免费下载的。现在,Java 开发人员、系统管理员和最终用户可以享受开源 Java 的全部优势,并具有部署灵活性和对升级时间的控制。

Amazon Correto OpenJDK 构建有一个易于使用的安装包,适用于 Java 8、Java 11、Java 15、Java 16、Java 17 和 Java 18。它安装到 Mac OSX 上的标准 /Library/Java/JavaVirtualMachines/ 目录。

Amazon Corretto 是开放式 Java 开发工具包 (OpenJDK) 的免费、多平台、生产就绪发行版。 Corretto 提供长期支持,包括性能增强和安全修复。亚马逊内部在数千个生产服务上运行 Corretto,并且 Corretto 被认证为与 Java SE 标准兼容。使用 Corretto,您可以在流行的操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。


我的JDK在哪里?!?!

要查找安装在默认系统位置的以前安装的 Java JDK 的位置,请使用:

 /usr/libexec/java_home -V

匹配Java虚拟机(四):

18.0.1.1(x86_64)“自制”-“OpenJDK 18.0.1.1”/usr/local/Cellar/openjdk/18.0.1.1/libexec/openjdk.jdk/Contents/Home

17(x86_64)“自制”-“OpenJDK 17”/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

11、x86_64:“Java SE 11”/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home

1.8.301.09 (x86_64) “Oracle Corporation” - “Java” /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home /usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

您还可以使用 -v 仅报告特定 Java 版本的位置。例如对于 Java 17:

 /usr/libexec/java_home -v 17

/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

在使用 JEnv 之类的工具,或手动将本地安装添加到 SDKMAN,或在 Jabba 中链接系统 JDK 时,了解已安装 JDK 的位置也很有用——而且您需要知道在哪里可以找到它们。

如果您需要查找其他工具安装的 JDK,请检查以下位置:

  • SDKMAN 安装到 ~/.sdkman/candidates/java/
  • asdf 安装到 ~/.asdf/installs/java
  • Jabba 安装到 ~/.jabba/jdk

版本切换

如果您使用的是 SDKMANasdf ,您已经被覆盖并且可以停止阅读!否则,这里有一些用于切换现有 VM 安装的选项。

手动切换版本

Java 可执行文件是一个包装器,它将使用 JAVA_HOME 中配置的任何 JDK,因此您可以更改它以更改正在使用的 JDK。

例如,如果您将 JDK 16 安装或解压缩到 /Library/Java/JavaVirtualMachines/jdk-16.jdk 如果它是最高版本号,则它应该已经是默认值,否则您可以简单地设置:

 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home

现在,路径中的任何 Java 可执行文件都将看到这一点并使用正确的 JDK。

更改 JDK 的一种简单方法 是在 ~/.bashrc~/.zshrc 文件中创建一个函数:

 jdk() {
    version=$1
    export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
    java -version
}

然后只需通过以下方式更改 JDK:

 jdk 1.8
jdk 9
jdk 11
jdk 13


使用 JEnv 切换版本

JEnv 期望 Java JDK 已经存在于机器上并且可以在任何位置。通常,您会在 /Library/Java/JavaVirtualMachines/ 中找到已安装的 Java JDK。 JEnv 允许设置 Java 的全局版本,一个用于当前 shell,以及每个目录的本地版本,这在某些项目需要与其他项目不同的版本时很方便。

  1. 如果您还没有安装 JEnv,请参阅网站 http://www.jenv.be/ 上的说明以进行手动安装或使用 Homebrew。

  2. 将任何 Java 版本添加到 JEnv( _如果您将其放在其他位置,请调整目录_):

    jenv add /usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home

  1. 使用以下命令设置您的全局版本:
    jenv global 17

您还可以使用 jenv add 以类似方式添加其他现有版本,并列出可用的版本。例如 Java 8:

 jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
jenv versions

有关更多命令,请参阅 JEnv 文档。您现在可以随时为整个系统、shell 或每个本地目录在任何 Java 版本(Oracle、OpenJDK 等)之间切换。

为了帮助管理 JAVA_HOME 在使用 JEnv 时,您可以添加 导出插件 来为您执行此操作。

 $ jenv enable-plugin export
  You may restart your session to activate jenv export plugin echo export plugin activated

导出插件可能不会调整 JAVA_HOME 如果它已经设置,所以你可能需要在你的配置文件中清除这个变量,以便它可以由 JEnv 管理。

您还可以使用 jenv exec <command> <parms...> 运行单个命令,其中 JAVA_HOMEPATH 为该命令正确设置,其中可能包括打开另一个 shell。


使用 Jabba 安装和切换版本

Jabba 还负责安装和切换。 Jabba 还将安装的 JDK 放入其自己的目录树中,通常为 ~/.jabba/jdk

  1. 按照主页上的说明 安装 Jabba。

  2. 列出可用的 JDK

    jabba ls-remote

  1. 安装 Java JDK 12
    jabba install openjdk@1.12.0

  1. 用它:
    jabba use openjdk@1.12.0

您还可以为版本名称设置别名,链接到已安装的现有 JDK,并找到有趣的 JDK 组合,例如 GraalVM、Adopt JDK、IBM JDK 等。完整的 使用指南 也可以在主页上找到。

当您更改版本时,Jabba 会自动为您管理 PATHJAVA_HOME

原文由 Jayson Minard 发布,翻译遵循 CC BY-SA 4.0 许可协议

我就是这样做的。

第 1 步: 安装 Java 11

您可以从此处下载适用于 Mac 的 Java 11 dmg: https ://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

第 2 步: 安装 Java 11 后。确认安装所有版本。在终端中键入以下命令。

 /usr/libexec/java_home -V

第 3 步: 编辑 .bash_profile

 sudo nano ~/.bash_profile

第 4 步: 将 11.0.1 添加为默认值。 (将以下行添加到 bash_profile 文件)。

 export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)

切换到任何版本

export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)

现在按 CTRL+X 退出 bash。按“Y”保存更改。

第 5 步: 重新加载 bash_profile

 source ~/.bash_profile

第 6 步: 确认当前的 Java 版本

java -version

原文由 VK321 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题