本文展示了如何在较旧的Mac OS X和最新的macOS11上设置$JAVA_HOME
环境变量。
解决方案
在macOS上设置$JAVA_HOME
环境变量的步骤。
1. 找出你的macOS版本。
2. 找出你用的是哪个shell,bash还是zsh?
3. 对于zsh shell,在~/.zshenv
或~/.zshrc
导出$JAVA_HOME
。
4. 对于bashshell,将$JAVA_HOME
导出到~/.bash_profile
或~/.bashrc
。
5. 使用echo $JAVA_HOME
进行测试。
6. 完成。
macOS发布历史,bash还是zsh?
回顾macOS发布历史,来源:Wikipedia–macOS
- Mac OS X Public Beta
- Mac OS X 10.0 (Cheetah)
- Mac OS X 10.1 (Puma)
- Mac OS X 10.2 Jaguar
- Mac OS X 10.3 Panther
- Mac OS X 10.4 Tiger
- Mac OS X 10.5 Leopard
- Mac OS X 10.6 Snow Leopard
- Mac OS X 10.7 Lion
- OS X 10.8 Mountain Lion
- OS X 10.9 Mavericks
- OS X 10.10 Yosemite
- OS X 10.11 El Capitan
- macOS 10.12 Sierra
- macOS 10.13 High Sierra
- macOS 10.14 Mojave
- macOS 10.15 Catalina (zsh)
- macOS 11 Big Sur (zsh)
bash还是zsh?
在MacOS 10.15 Catalina和更高版本上,默认的终端shell从bash(BourneShell)切换到zsh(Zshell)。
对于bashshell,我们可以将环境变量放在~/.bash_profile
或~/.bashrc
中。
对于zsh shell,我们可以将环境变量设置为~/.zshenv
或~/.zshrc
。
我们可以打印$SHELL
环境变量来确定您正在使用的当前SHELL。
% echo $SHELL
/bin/zsh
什么是/usr/libexec/java_home
在MacOS X 10.5或更高版本上,我们可以使用/usr/libexec/java_home
返回默认JDK的位置。
% /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
另外,查找所有已安装的jdk。
% /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
16 (x86_64) "Oracle Corporation" - "OpenJDK 16-ea" /Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
15.0.1 (x86_64) "UNDEFINED" - "OpenJDK 15.0.1" /usr/local/Cellar/openjdk/15.0.1/libexec/openjdk.jdk/Contents/Home
14.0.2 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 14" /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
1.8.0_275 (x86_64) "UNDEFINED" - "OpenJDK 8" /usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
另外,运行指定的JDK命令。
% /usr/libexec/java_home -v1.8
/usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home
$JAVA_HOME和macOS 11 Big Sur
在macOS 10.15 Catalina及更高版本上,zsh是默认的终端shell,我们可以在~/.zshenv
或~/.zshrc
中设置$JAVA_HOME
环境变量。
打开~/.zshenv
% nano ~/.zshenv
添加以下内容
export JAVA_HOME=$(/usr/libexec/java_home)
源文件并打印$JAVA_HOME
,完成。
% source ~/.zshenv
% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
$JAVA_HOME和Mac OS X 10.5 Leopard
对于较旧的Mac OS X,bash是默认的终端shell,我们可以在~/.bash_profile
或~/.bashrc
中设置$JAVA_HOME
环境变量。
打开~/.bash_profile
% nano ~/.bash_profile
添加以下内容
export JAVA_HOME=$(/usr/libexec/java_home)
源文件并打印$JAVA_HOME
% source ~/.bash_profile
% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
$JAVA_HOME和旧版Mac OS X
在旧的MacOS X 上,工具/usr/libexec/java_home
不存在,我们需要将$JAVA_HOME
设置为真实路径。
打开~/.bash_profile
% nano ~/.bash_profile
添加以下内容
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
源文件并打印$JAVA_HOME
% source ~/.bash_profile
% echo $JAVA_HOME
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
在不同的JDK版本之间切换
例如,这个macOS包含四个JDK:1.8、14、15和16,默认JDK是16。
% /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
16 (x86_64) "Oracle Corporation" - "OpenJDK 16-ea" /Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
15.0.1 (x86_64) "UNDEFINED" - "OpenJDK 15.0.1" /usr/local/Cellar/openjdk/15.0.1/libexec/openjdk.jdk/Contents/Home
14.0.2 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 14" /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
1.8.0_275 (x86_64) "UNDEFINED" - "OpenJDK 8" /usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
对于zsh shell,编辑~/.zshenv
% nano ~/.zshenv
/usr/libexec/java_home-v {$Version}
激活指定的JDK版本。
添加以下内容以激活JDK1.8
export JAVA_HOME=$(/usr/libexec/java_home -v1.8)
如果我们想要JDK14。
export JAVA_HOME=$(/usr/libexec/java_home -v14)
如果我们想要JDK15。
export JAVA_HOME=$(/usr/libexec/java_home -v15)
源文件并打印$JAVA_HOME
,完成。
% source ~/.zshenv
% echo $JAVA_HOME
/usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home