Note: These solutions work for various versions of Java including Java 8 through Java 17 (the LTS version). This includes alternative JDK's from OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal and more. Easily work with Java 7, Java 8, Java 9, Java 10, Java 11, Java 12, Java 13, Java 14, Java 15, Java 16, and Java 17!
对于如何进行安装以及如何管理JDK交换,您有几个选项.安装可以通过brew 、SDKMAN、asdf、Jabba或手动安装完成.可通过JEnv、SDKMAN、asdf、Jabba或通过设置JAVA_HOME
手动进行切换.下面将对所有这些进行描述.
TL;DR - Preferred Methods of Installation
您可以使用您喜欢的任何方法安装Java,包括SDKMAN、asdf、brew 或手动安装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 17:
sdk install java 17-open
将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将自动为您管理PATH
和JAVA_HOME
.值得注意的是,它将Java版本安装到~/.sdkman/candidates/java/
.
更多信息可以在SDKMAN Usage Guide和other SDK's中找到,它们可以安装和管理.
Installing and Switching versions with "asdf"
asdf是一个版本管理器,支持安装和管理大多数语言、框架和开发人员/devops工具.它有特定于语言的插件,包括一个for Java.
首先,安装asdf到https://asdf-vm.com/guide/getting-started.html(请阅读此处以正确设置您的shell),或者更简单:
brew reinstall asdf
和read the doc用于正确设置您的shell,但如果您使用的是带有ZSH的Homebrew中的asdf,则可以执行以下命令来完成设置:
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
然后通过https://github.com/halcyon/asdf-java安装Java插件
asdf plugin add java
read the doc用于在继续之前正确设置shell.基本上,它说要将以下内容添加到您的~/.zshrc
文件中(假设您没有使用另一个shell):
. ~/.asdf/plugins/java/set-java-home.zsh
现在列出Java版本:
asdf list-all java
安装您最喜欢的口味和版本:
asdf install java openjdk-17
或安装最新版本:
asdf install java latest
其他重要的命令还有...
就这么简单!asdf将在您更改版本时自动管理您的PATH和JAVA_HOME.请注意,asdf将Java版本安装到~/.asdf/installs/java
.
这里有其他asdf语言和插件,来自存储库页面:https://github.com/asdf-vm/asdf-plugins
Other Methods of Installation
用brew 软件安装
在2018年10月3日之前,Homebrew Cask中提供的Java版本确实是Oracle JVM.但是,现在它已经更新到OpenJDK.请务必更新HomeBREW,然后您将看到可供安装的最新版本.
install Homebrew,如果你还没有.确保它已更新:
brew update
加入木桶龙头:
brew tap homebrew/cask-versions
这些容器经常更改其Java版本,可能还有其他带有附加Java版本的水龙头.
寻找可安装的版本:
brew search java
或者对于Eclipse Temurin版本:
brew search temurin
判断将要安装的版本的详细信息:
brew info java
或者对于Temurin版本:
brew info temurin
安装JDK的特定版本,例如java11
、temurin8
、temurin11
,或者仅安装java
或temurin
,以适应最新版本的JDK.例如:
brew install java
brew install --cask temurin
这些设备将安装在/Library/Java/JavaVirtualMachines/
,这是在MacOSX上预期的传统位置.可能需要额外的步骤才能在安装过程结束时报告JDK处于活动状态.
从OpenJDK下载页面手动安装:
如果你需要任何版本的Java,这是一个好地方.
从http://jdk.java.net/下载OpenJDK for Mac OSX(例如Java 17)
取消对OpenJDK tar的归档,并将生成的文件夹(即jdk-17.jdk
)放入/Library/Java/JavaVirtualMachines/
文件夹中,因为这是JDK安装的标准和预期位置.实际上,你也可以在任何地方安装.
将JAVA_HOME
环境变量设置为指向您解压JDK的方向.
更多信息请参见答案specific to manual installation.有关如何管理多个手动安装的更多信息,请参见下面的"手动切换版本"部分.
其他安装选项:
OpenJDK的其他一些口味包括:
遵循instructions on their site可以安装100 Java Zulu个经过认证的OpenJDK版本.
Zulu®是OpenJDK的认证版本,完全符合Java SE标准.Zulu是100%开源的,可以免费下载.现在,Java开发人员、系统管理员和最终用户可以充分享受开源Java带来的好处,包括部署灵活性和对升级时间的控制.
Amazon Correto个OpenJDK版本有一个易于使用的Java 8、Java 11、Java 15、Java 16和Java 17安装包.它安装在Mac OSX上的标准/Library/Java/JavaVirtualMachines/
目录中.
Amazon Corretto是开放Java开发工具包(OpenJDK)的一个无成本、多平台、可生产的发行版.Corretto提供长期支持,包括性能增强和安全修复.亚马逊在内部运行Corretto,提供数千种生产服务,Corretto经认证与Java SE标准兼容.使用Corretto,您可以在流行的操作系统上开发和运行Java应用程序,包括Linux、Windows和macOS.
Where is my JDK?!?!
要查找以前安装的Java JDK在默认系统位置的安装位置,请使用:
/usr/libexec/java_home -V
Matching Java Virtual Machines (10):
17 (x86_64) "Homebrew" - "OpenJDK 17" /usr/local/ceral/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/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home
您还可以使用-v
报告特定Java版本的位置.例如,对于Java 17:
/usr/libexec/java_home -v 17
/usr/local/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home
在使用JEnv等工具时,或者手动将本地安装添加到SDKMAN中,或者在Jabba中链接系统JDK时,知道已安装JDK的位置也很有用--并且您需要知道在哪里可以找到它们.
如果需要查找其他工具安装的JDK,请查看以下位置:
- SDKMAN安装到
~/.sdkman/candidates/java/
- asdf安装到
~/.asdf/installs/java
- 贾巴安装到
~/.jabba/jdk
Version Switching
如果你使用SDKMAN或asdf,你已经被覆盖,可以停止阅读!否则,下面是一些切换现有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.
simple way to change JDKs是在您的~/.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的版本,另一个是针对每个目录的本地版本,这在某些项目需要的版本与其他项目不同时非常方便.
如果您尚未安装JEnv,请参阅站点http://www.jenv.be/上有关手动安装或使用Homebrew的说明.
向JEnv(adjust the directory if you placed this elsewhere)添加任何Java版本:
jenv add /usr/local/ceral/openjdk/17/libexec/openjdk.jdk/Contents/Home
使用以下命令设置您的全局版本:
jenv global 17
您还可以使用类似的方式添加使用jenv add
的其他现有版本,并列出可用的版本.例如,Java 8:
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
jenv versions
有关更多命令,请参阅JEnv docs.现在,您可以随时在任何Java版本(Oracle、OpenJDK或其他)之间切换,无论是针对整个系统、针对Shell,还是针对每个本地目录.
要在使用JEnv时帮助管理JAVA_HOME
,您可以添加export plugin来完成这项工作.
$ 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_HOME
和PATH
,这可能包括打开另一个shell.
使用Jabba安装和切换版本
Jabba还处理安装和切换.Jabba还将安装的JDK放入自己的目录树中,通常是~/.jabba/jdk
.
按照instructions on the home page安装Jabba.
列出可用的JDK
jabba ls-remote
安装Java JDK 12
jabba install openjdk@1.12.0
使用它:
jabba use openjdk@1.12.0
您还可以别名版本名,链接到已经安装的现有JDK,并找到一些有趣的JDK,如GraalVM、Adoption JDK、IBM JDK等.完整的usage guide个版本也可以在主页上找到.
Jabba将在您更改版本时自动为您管理PATH
和JAVA_HOME
.