這篇文章將告訴你如何分別在舊的mac osx上和最新的macOS11+上設(shè)置JAVA_HOME
- macOS 發(fā)布?xì)v史
- 什么是
/usr/libexec/java_home
- $JAVA_HOME 和 macOS 11 Big Sur
- $JAVA_HOME 和 Mac OS X 10.5 Leopard
- $JAVA_HOME 和 older Mac OS X
- 在不同的 JDK 版本間切換
解決辦法
在macOS上設(shè)置 $JAVA_HOME
的步驟
- 明確系統(tǒng)版本
- 明確你使用的shell類型, bash or zsh?
- 對于 zsh shell, export
$JAVA_HOME
at~/.zshenv
or~/.zshrc
- 對于 bash shell, export
$JAVA_HOME
at~/.bash_profile
or~/.bashrc
- 打印
echo $JAVA_HOME
- Done。
1法挨、macOS發(fā)布?xì)v史叉跛,bash 還是 zsh蹦锋?
1.1 重溫macOS發(fā)布?xì)v史, source 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)
1.2 bash or zsh?
自 macOS 10.15 Catalina 及之后, 默認(rèn)的 Terminal shell 從 bash (Bourne-again shell) 換成了 zsh (Z shell).
- 對于 bash shell, 我們可以設(shè)置環(huán)境變量的文件是
~/.bash_profile
或~/.bashrc
- 對于 zsh shell, 我們可以設(shè)置環(huán)境變量的文件是
~/.zshenv
或~/.zshrc
可以通過環(huán)境變量 $SHELL
查看你當(dāng)前使用的shell類型
2. 什么是 /usr/libexec/java_home
2.1 從Mac OS X 10.5+, 我們可以使用 /usr/libexec/java_home
返回默認(rèn)的jdk路徑
2.2 也可以找到所有已安裝JDKs
% /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
2.3 也可以運(yùn)行特殊的jdk命令
% /usr/libexec/java_home -v1.8
/usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home
3. $JAVA_HOME 和 macOS 11 Big Sur
從 macOS 10.15+, zsh
成為默認(rèn)的 Terminal shell, 我們可以通過 ~/.zshenv
or ~/.zshrc
設(shè)置 $JAVA_HOME
~/.zshenv
export JAVA_HOME=$(/usr/libexec/java_home)
4. $JAVA_HOME 和 Mac OS X 10.5 Leopard
對于 更舊的 Mac OS X版本, bash
作為默認(rèn)的 Terminal shell, 我們可以通過 ~/.bash_profile
or ~/.bashrc
設(shè)置$JAVA_HOME
~/.bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
5. $JAVA_HOME 和 更舊的 Mac OS X
對于更舊的 Mac OS X 版本, 則沒有 /usr/libexec/java_home
這樣的工具硫戈,我們需要將真實(shí)java路徑設(shè)置到 $JAVA_HOME
舅巷,如
~/.bash_profile
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
再
% source ~/.bash_profile
6. JDK 版本間切換
比如忍饰,當(dāng)前 macOS 包含 4個(gè) JDK: 1.8, 14, 15, and 16, 和 默認(rèn) 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
6.1 根據(jù)shell類型打開對應(yīng)的配置文件如 ~/.zshenv
6.2 然后通過/usr/libexec/java_home -v"{$Version}"
激活特定的 JDK 版本
如JDK8
~/.zshenv
export JAVA_HOME=$(/usr/libexec/java_home -v1.8)
假如你需要 JDK 14
~/.zshenv
export JAVA_HOME=$(/usr/libexec/java_home -v14)
假如你需要 JDK 15
~/.zshenv
export JAVA_HOME=$(/usr/libexec/java_home -v15)
6.3 Source 文件 并打印 $JAVA_HOME
, 完成蜜葱。
% source ~/.zshenv
% echo $JAVA_HOME
/usr/local/Cellar/openjdk@8/1.8.0+275/libexec/openjdk.jdk/Contents/Home