如何在macOS上配置jdk环境变量插图

本文展示了如何在较旧的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

  1. Mac OS X Public Beta
  2. Mac OS X 10.0 (Cheetah)
  3. Mac OS X 10.1 (Puma)
  4. Mac OS X 10.2 Jaguar
  5. Mac OS X 10.3 Panther
  6. Mac OS X 10.4 Tiger
  7. Mac OS X 10.5 Leopard
  8. Mac OS X 10.6 Snow Leopard
  9. Mac OS X 10.7 Lion
  10. OS X 10.8 Mountain Lion
  11. OS X 10.9 Mavericks
  12. OS X 10.10 Yosemite
  13. OS X 10.11 El Capitan
  14. macOS 10.12 Sierra
  15. macOS 10.13 High Sierra
  16. macOS 10.14 Mojave
  17. macOS 10.15 Catalina (zsh)
  18. 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