如何在Mac OSX上安装Java以允许版本切换?TL;DR - 首选安装方法其他安装方法我的JDK在哪里?!?!版本切换

2022-08-31 04:28:19

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

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

brew cask info java

显示:

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

所以我可以从那里安装它,但那又如何呢?我是否只坚持使用新版本?


答案 1

注意:这些解决方案适用于各种版本的 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 允许设置全局默认版本,以及特定于当前 shell 的版本。~/.sdkman/candidates/java

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

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

    sdk list java
    
  3. 安装其中一个版本,例如 Java 17 LTS:

    sdk install java 17-open 
    

    或java 18:

    sdk install java 18-open
    
  4. 将 Java 17 设为缺省版本:

    sdk default java 17-open
    

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

    sdk use java 17-open
    

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

sdk list java

并安装其他版本,例如来自亚马逊的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 将在您更改版本时自动为您管理您的和。请注意,它将Java版本安装到。PATHJAVA_HOME~/.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 的文档,然后再继续。基本上,它说要将以下内容添加到您的文件中(假设您没有使用其他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


其他安装方法

使用自制软件安装

在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,例如 、、、或仅安装或用于该发行版的最新版本。例如:java11temurin8temurin11temurin17javatemurin

     brew install java
    
     brew install --cask temurin
    

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

从 OpenJDK 下载页面手动安装:

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

  1. http://jdk.java.net/ 下载OpenJDK for Mac OSX(例如Java 17Java 18))

  2. 取消存档 OpenJDK tar,并将生成的文件夹(即 )放入您的文件夹中,因为这是 JDK 安装的标准和预期位置。您也可以在现实中随心所欲地安装。jdk-17.jdk/Library/Java/JavaVirtualMachines/

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

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

其他安装选项:

OpenJDK的其他一些口味是:

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

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

亚马逊科雷托OpenJDK 构建版具有适用于 Java 8、Java 11、Java 15、Java 16、Java 17 和 Java 18 的易于使用的安装包。它安装到Mac OSX上的标准目录。/Library/Java/JavaVirtualMachines/

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


我的JDK在哪里?!?!

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

/usr/libexec/java_home -V

Matching Java Virtual Machines (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 版本的位置。例如,对于 Java 17:-v

/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 可执行文件是一个包装器,它将使用 在 中配置的任何 JDK,因此您可以更改它以更改正在使用的 JDK。JAVA_HOME

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

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

现在,无论路径中的Java可执行文件是什么,都会看到这一点并使用正确的JDK。

更改 JDK 的一种简单方法是在 or 文件中创建一个函数:~/.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已经存在于机器上,并且可以位于任何位置。通常,您会在 中找到已安装的 Java JDK。JEnv允许设置Java的全局版本,一个用于当前shell,以及每个目录的本地版本,当某些项目需要与其他项目不同的版本时,这很方便。/Library/Java/JavaVirtualMachines/

  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
    

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

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

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

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

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

如果已经设置了导出插件,则可能不会对其进行调整,因此您可能需要在配置文件中清除此变量,以便 JEnv 可以对其进行管理。JAVA_HOME

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


使用 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


答案 2

我就是这样做的。

第 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