首页 > 解决方案 > 如何在允许版本切换的 Mac OSX 上安装 Java?

问题描述

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

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

brew cask info java

显示:

java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/

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

标签: javamacosjava-17

解决方案


注意: 这些解决方案适用于各种 Java 版本,包括 Java 8 到 Java 17(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!

对于如何进行安装以及管理 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
    
  3. 安装其中一个版本,例如 Java 17:

    sdk install java 17-open 
    
  4. 将 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.10.9.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
    
  2. 然后通过https://github.com/halcyon/asdf-java安装 Java 插件

    asdf plugin add java
    

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

    . ~/.asdf/plugins/java/set-java-home.zsh
    
  3. 现在列出 Java 版本:

    asdf list-all java
    
  4. 安装您喜欢的风味和版本:

    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
    
  2. 添加木桶水龙头:

     brew tap homebrew/cask-versions
    

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

  3. 寻找可安装的版本:

     brew search java  
    

    或者对于 Eclipse Temurin 版本:

     brew search temurin     
    
  4. 检查将安装的版本的详细信息:

     brew info java
    

    或者对于 Temurin 版本:

     brew info temurin
    
  5. 安装特定版本的 JDK,例如java11temurin8temurin11或仅安装该发行版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 17

  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 安装包。它安装到/Library/Java/JavaVirtualMachines/Mac OSX 上的标准目录。

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


我的JDK在哪里?!?!

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

/usr/libexec/java_home -V

匹配 Java 虚拟机 (10):
17 (x86_64) "Homebrew" - "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

您还可以使用 仅报告特定 Java 版本的位置-v。例如对于 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/jdk

版本切换

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

手动切换版本

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

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

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

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

更改 JDK的一种简单方法是在您的~/.bashrcor~/.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/. 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
    
  3. 使用以下命令设置您的全局版本:

    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
    
  3. 安装 Java JDK 12

    jabba install openjdk@1.12.0
    
  4. 用它:

    jabba use openjdk@1.12.0
    

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

当您更改版本时, Jabba 将自动管理您的PATHJAVA_HOME为您服务。


推荐阅读