注意:这些解决方案适用于包括Java 8到Java 21(LTS版本)在内的各个版本的Java。这包括来自OpenJDK、Oracle、IBM、Azul、Amazon Correto、Graal等的替代JDK。
您有几种选择来进行安装和管理JDK的切换。可以通过Homebrew、
SDKMAN、
asdf或手动安装来进行安装。可以通过
SDKMAN、
asdf或手动设置
JAVA_HOME
来进行切换。以下将对所有这些进行描述。
TL;DR - 首选安装方法
您可以使用您喜欢的任何方法来安装Java,包括SDKMAN、asdf、Homebrew,或者手动安装tar.gz文件。手动安装的优点是可以将JDK的位置放在Mac OSX的标准位置。
然而,还有更简单的选择,比如SDKMAN和asdf,它们还会安装JVM的其他重要和常用工具。这两个主要选项在这里进行了描述。
使用SDKMAN安装和切换版本
SDKMAN有点不同,它处理安装和切换两个过程。SDKMAN还将安装的JDK放在自己的目录树中,通常是~/.sdkman/candidates/java
。SDKMAN允许设置全局默认版本和当前shell特定的版本。
从https://sdkman.io/install安装SDKMAN
列出可用的Java版本,确保您知道版本ID
sdk list java
安装其中一个版本,例如Java 21 LTS:
sdk install java 21-open
或者Java 19:
sdk install java 19.0.2-open
将Java 17设置为默认版本:
sdk default java 17-open
或者在当前终端会话中切换到17:
sdk use java 17-open
当您使用列表命令列出可安装的版本时,您将看到各种各样的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会在您更改版本时自动管理您的PATH和JAVA_HOME。另外,请注意,它会将Java版本安装到~/.sdkman/candidates/java/目录下。
更多信息可在
SDKMAN使用指南中找到,其中还包括它可以安装和管理的其他SDK,如Gradle、Maven、Kotlin、Quarkus、Spring Boot等等。
使用 "asdf" 安装和切换版本
asdf 是一个版本管理工具,支持安装和管理大多数编程语言、框架和开发/运维工具。它还具有针对特定语言的插件,包括一个 Java 的插件。
首先,通过
https://asdf-vm.com/guide/getting-started.html安装
asdf(请在那里阅读并正确设置您的shell),或者更简单地执行以下命令:
brew reinstall asdf
如果您使用Homebrew和ZSH来使用
asdf,您可以执行以下命令完成设置,并
阅读文档以正确设置您的shell:
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
然后,通过
https://github.com/halcyon/asdf-java安装Java插件:
asdf plugin add java
并在继续之前
阅读文档以正确设置您的shell。基本上,它要求您将以下内容添加到您的
~/.zshrc
文件(假设您没有使用其他shell):
. ~/.asdf/plugins/java/set-java-home.zsh
现在列出Java版本:
asdf list-all java
安装您喜欢的版本:
asdf install java openjdk-21
或者安装最新版本:
asdf install java latest
其他重要的命令包括...
列出已安装的版本:
asdf list java
设置全局Java版本:
asdf global java openjdk-21
为目录设置本地Java版本:
asdf local java openjdk-19
这就是这么简单!当你切换版本时,
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,然后您将看到可供安装的最新版本。
如果你还没有安装Homebrew,请先安装Homebrew。确保它已经更新:
brew update
添加casks tap:
brew tap homebrew/cask-versions
这些casks经常更改它们的Java版本,可能还有其他tap包含额外的Java版本。
查找可安装的版本:
brew search java
或者查找Eclipse Temurin版本:
brew search temurin
查看将要安装的版本的详细信息:
brew info java
或者查看Temurin版本的详细信息:
brew info temurin
安装特定版本的JDK,例如java11
,temurin8
,temurin11
,temurin17
,或者只是java
或temurin
以获取最新的发行版。例如:
brew install java
brew install --cask temurin
这些将被安装到Mac OSX上预期的传统位置
/Library/Java/JavaVirtualMachines/
。安装过程结束时可能会报告使JDK生效的额外步骤。
从OpenJDK下载页面手动安装:
如果您需要任何版本的Java,这是一个好地方。
从http://jdk.java.net/(例如Java 17和Java 21)下载Mac OSX的OpenJDK。
解压OpenJDK tar文件,并将结果文件夹(即jdk-19.jdk
)放入/Library/Java/JavaVirtualMachines/
文件夹中,因为这是JDK安装的标准和预期位置。实际上,您也可以安装在任何您想要的地方。
将JAVA_HOME
环境变量设置为指向您解压JDK的目录。
如需更多信息,请参阅答案关于手动安装的具体内容。此外,还可以查看下面的“手动切换版本”部分,了解如何管理多个手动安装的更多信息。
其他安装选项:
一些其他的OpenJDK版本包括:
Azul Systems Java Zulu 是OpenJDK的经过认证的构建版本,可以按照他们网站上的说明进行安装。
Zulu® 是OpenJDK的经过认证的构建版本,完全符合Java SE标准。Zulu是100%开源且可免费下载的。现在,Java开发人员、系统管理员和最终用户可以享受开源Java的全部好处,并具备部署灵活性和对升级时间的控制。
Amazon Correto OpenJDK构建具有易于使用的Java 8、11、17和Java 21安装包。它安装到Mac OSX上的标准/Library/Java/JavaVirtualMachines/
目录。
Amazon Corretto是一个免费的、跨平台的、生产就绪的Open Java Development Kit(OpenJDK)发行版。Corretto具有长期支持,包括性能增强和安全修复。亚马逊在数千个生产服务中内部运行Corretto,并且Corretto已通过Java SE标准的兼容性认证。使用Corretto,您可以在流行的操作系统上开发和运行Java应用程序,包括Linux、Windows和macOS。
Microsoft Java JDK - 来自Microsoft的经过认证的OpenJDK构建。
我的JDK在哪里?!?!
要查找先前安装在默认系统位置的Java JDK的位置,请使用:
/usr/libexec/java_home -V
匹配的Java虚拟机(4):
19(x86_64)"Homebrew" - "OpenJDK 19" /usr/local/Cellar/openjdk/19/libexec/openjdk.jdk/Contents/Home
18.0.1.1(x86_64)"Homebrew" - "OpenJDK 18.0.1.1" /usr/local/Cellar/openjdk/18.0.1.1/libexec/openjdk.jdk/Contents/Home
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
您还可以使用-v报告特定Java版本的位置。例如,对于Java 17:
/usr/libexec/java_home -v 17
/usr/local/Cellar/openjdk/17/libexec/openjdk.jdk/Contents/Home
知道已安装的JDK的位置对于使用工具如JEnv或手动将本地安装添加到SDKMAN也很有用 - 您需要知道它们的位置。
如果您需要查找其他工具安装的JDK,请检查以下位置:
- SDKMAN安装到
~/.sdkman/candidates/java/
-
asdf安装到
~/.asdf/installs/java
版本切换
如果您正在使用SDKMAN或asdf,那么您已经完成了,可以停止阅读!否则,以下是一些切换现有虚拟机安装的选项。
手动切换版本
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
编辑:
- 删除了Jabba和JENV,因为它们似乎已经停滞不前,问题数量急剧上升,并且问题/PR没有得到维护者的解决。