一篇文章徹底搞懂macOS如何決定java環(huán)境
打開 macOS 的終端輸入 java --version,如果有如下輸出,說明安裝過 java 環(huán)境。
? ~ java -version openjdk version "24.0.1" 2025-04-15 OpenJDK Runtime Environment (build 24.0.1+9-30) OpenJDK 64-Bit Server VM (build 24.0.1+9-30, mixed mode, sharing)
要想知道 java 安裝的位置,可以使用如下方法:
方法一:使用 which命令
這個命令用于定位可執(zhí)行文件的路徑。
which java
??輸出結(jié)果示例:??
/usr/bin/java
- ??注意:?? 這通常是一個“中間人”路徑。macOS 使用一種叫做“包裝器”的機制,
/usr/bin/java實際上是一個替身,它會指向真正的 Java 安裝位置。要找到真實路徑,我們需要下一步。
方法二:使用 java_home工具(Apple 官方推薦)
macOS 自帶了一個名為 /usr/libexec/java_home的專用工具來管理 Java 位置,這是查詢當(dāng)前使用中的 JDK 路徑的最佳方式。
/usr/libexec/java_home
??輸出結(jié)果示例:??
/Library/Java/JavaVirtualMachines/openjdk-24.0.1.jdk/Contents/Home
- 這個路徑就是您當(dāng)前運行的 Java 版本(OpenJDK 24.0.1)的??真正安裝根目錄??。
??進(jìn)階用法:?? 列出所有已安裝的 Java 版本
/usr/libexec/java_home -V
-V(大寫V)參數(shù)會列出您系統(tǒng)上安裝的??所有?? JDK,并標(biāo)明哪個是當(dāng)前正在使用的版本。
那問題來了,如果電腦上有多個 java 環(huán)境,系統(tǒng)如何決定使用哪個?
簡單答案是:??系統(tǒng)通過一套明確的優(yōu)先級規(guī)則,動態(tài)地決定了當(dāng)前終端會話使用哪個 Java 版本。?
1. 優(yōu)先級規(guī)則 (PATH 變量)
當(dāng)在終端輸入 java或 javac時,系統(tǒng)會按照 PATH環(huán)境變量中列出的路徑順序,??從左到右??尋找第一個匹配的可執(zhí)行文件。
通常,
/usr/bin目錄在PATH中優(yōu)先級很高。而在
/usr/bin目錄下,存在一個名為java的“包裝器腳本”或“符號鏈接”。這個包裝器??不會??固定指向某個版本,它會調(diào)用下一個工具來決定。

2. 決策工具 (/usr/libexec/java_home)
/usr/bin/java這個包裝器背后真正的決策者正是之前用到的命令:/usr/libexec/java_home。
這個工具會按照以下邏輯選擇??當(dāng)前默認(rèn)的 JDK??:
??檢查 $JAVA_HOME環(huán)境變量??:如果用戶顯式設(shè)置了這個變量,則優(yōu)先使用它指向的路徑。
??檢查特定應(yīng)用程序的配置??:某些工具(如 IDEA)可能會在特定上下文中設(shè)置路徑。
??遍歷 /Library/Java/JavaVirtualMachines/和 ~/Library/Java/JavaVirtualMachines/??:查找所有已安裝的 JDK。
??選擇版本號最高的 JDK??:??如果沒有其他配置,這就是默認(rèn)行為,它會自動選擇它找到的??最新、版本號最大??的 JDK。
3. 驗證決策過程
可以運行以下命令來親眼見證這個決策過程:
/usr/libexec/java_home -V
這個命令會列出??所有??發(fā)現(xiàn)的 JDK,并在最后一行明確指出當(dāng)前被選中的是哪一個(Matching Java Virtual Machines列表中的第一個)。
? ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
24.0.1 (arm64) "Oracle Corporation" - "OpenJDK 24.0.1" ~/Library/Java/JavaVirtualMachines/openjdk-24.0.1/Contents/Home
21.0.7 (arm64) "Microsoft" - "OpenJDK 21.0.7" ~/Library/Java/JavaVirtualMachines/ms-21.0.7/Contents/Home
1.8.0_442 (arm64) "Amazon" - "Amazon Corretto 8" ~/Library/Java/JavaVirtualMachines/corretto-1.8.0_442/Contents/Home
~/Library/Java/JavaVirtualMachines/openjdk-24.0.1/Contents/Home
輸出列表按版本號??從高到低??自動排序(24.0.1 → 21.0.7 → 1.8.0_442)
系統(tǒng)默認(rèn)選擇??第一個匹配項??(即最高版本)
總結(jié)
到此這篇關(guān)于macOS如何決定java環(huán)境的文章就介紹到這了,更多相關(guān)macOS決定java環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中數(shù)據(jù)訪問對象Data Access Object的介紹
今天小編就為大家分享一篇關(guān)于Spring中數(shù)據(jù)訪問對象Data Access Object的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
Spring MVC學(xué)習(xí)筆記之json格式的輸入和輸出
本篇文章主要介紹了Spring MVC學(xué)習(xí)筆記之json格式的輸入和輸出,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03
SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)支付功能附源碼
這篇文章主要介紹了SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)功能支付附源碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
舉例講解Java的Hibernate框架中的多對一和一對多映射
這篇文章主要介紹了Java的Hibernate框架中的多對一和一對多映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
JVM?運行時數(shù)據(jù)區(qū)與JMM?內(nèi)存模型
這篇文章主要介紹了JVM?運行時數(shù)據(jù)區(qū)與JMM?內(nèi)存模型,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值。需要的朋友可以參考一下2022-07-07

