通過Jenv管理多JDK版本的詳細(xì)介紹
前言
Jenv 是一個輕量級的 Java 版本管理工具,可以幫助你在 macOS/Linux 上輕松安裝、切換和管理多個 JDK 版本。下面詳細(xì)介紹如何使用 jenv 管理多個 JDK 版本。
1. 安裝 jenv
推薦使用 Homebrew 安裝 jenv 工具來管理多個 JDK 版本:
brew install jenv
安裝完成后,根據(jù) shell 類型(bash/zsh)配置環(huán)境變量。在這,在 ~/.bash_profile 文件中添加如下信息:
# JENV export JENV_HOME=.jenv export PATH=$JENV_HOME/bin:$PATH eval "$(jenv init -)"
重新加載配置文件使之生效:
source ~/.bash_profile
驗證安裝:
smarsi:~ smartsi$ jenv doctor [OK] No JAVA_HOME set [OK] Java binaries in path are jenv shims [OK] Jenv is correctly loaded
如果一切正常,會顯示’Jenv is correctly loaded’。
需要注意的是 ~/.bash_profile 環(huán)境變量中不要配置 JAVA_HOME,否則會出現(xiàn)如下異常:
smarsi:~ smartsi$ jenv doctor [ERROR] JAVA_HOME variable already set, scripts that use it directly could not use java version set by jenv [ERROR] Java binary in path is not in the jenv shims. [ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation. PATH : ... [ERROR] Jenv is not loaded in your bash [ERROR] To fix : echo 'eval "$(jenv init -)"' >> /Users/smartsi/.bash_profile
2. 安裝多 JDK 版本
jenv 本身不安裝 JDK,你需要先通過其他方式安裝好 JDK。這里以 Homebrew 安裝 OpenJDK 為例。首先使用 brew search openjdk 命令搜索可用的 JDK 版本:

2.1 如何選擇 JDK
從上面可以看到有兩種 JDK,一種是使用 formula 安裝 OpenJDK,另一種是使用 cask 安裝 Oracle JDK 或其他供應(yīng)商的 JDK。區(qū)別在于安裝方式、位置和管理方式:
| 特性 | Formulae | Casks |
|---|---|---|
| 適用對象 | 命令行工具、庫、開發(fā)包(如 OpenJDK、Maven、Git) | 原生 GUI 應(yīng)用程序(如 IntelliJ IDEA、Oracle JDK 安裝包) |
| 安裝位置 | 通常鏈接到 /usr/local(或 /opt/homebrew,Apple Silicon)下的 bin、lib 等目錄 | 安裝在 /Applications 或用戶指定的 Applications 目錄 |
| 安裝內(nèi)容 | 下載預(yù)編譯二進(jìn)制或源碼編譯,然后通過符號鏈接集成到系統(tǒng)環(huán)境 | 下載 .app 或安裝器,拖拽或運行安裝程序 |
| JDK 實例 | brew install openjdk(安裝 OpenJDK 的 Homebrew 移植版) | brew install --cask oracle-jdk 或 brew install --cask adoptopenjdk(安裝官方或其他供應(yīng)商的 JDK 安裝包) |
| 環(huán)境配置 | 安裝后通常會自動處理路徑(如將 openjdk 加入 PATH),或需要手動鏈接 | 安裝后需要手動設(shè)置 JAVA_HOME 或通過 /usr/libexec/java_home 工具管理 |
當(dāng)你需要運行 Java 程序時,是選擇 Formulae 還是 Casks?當(dāng) 純命令行開發(fā)/運行 場景時推薦 Formulae(如 brew install openjdk@17)。推薦原因是:安裝快捷,自動加入 PATH,便于終端操作,版本切換靈活(配合 jenv)。
2.2 安裝 JDK
在這選擇使用 formula 方式安裝 OpenJDK,以 openjdk@17 為例:
brew install openjdk@17
注意 Mac apple 芯片安裝 openjdk@8 會報錯:
The x86_64 architecture is required for this software. 因此安裝 jdk8 可以直接從 Oracle 官網(wǎng)上下載免費版本進(jìn)行安裝。
Homebrew 會將 JDK 安裝在 /usr/local/opt/openjdk@<version>(Intel) 或 /opt/homebrew/opt/openjdk@<version>(Apple Silicon) 下。在這 JDK 安裝路徑為 /opt/homebrew/opt/openjdk@17
/opt/homebrew為 homebrew 安裝路徑。
通過安裝包安裝的 JDK 安裝路徑一般為
/Library/Java/JavaVirtualMachines/
2.3 將 JDK 添加到 jenv
可以使用 jenv add 命令將 JDK 的主目錄路徑添加進(jìn)去。Homebrew 安裝的 OpenJDK 路徑通常是 /usr/local/opt/openjdk@<version> 或 /opt/homebrew/opt/openjdk@<version>。我們可以通過以下命令添加 OpenJDK 17 和 OpenJDK 11:
# 添加 OpenJDK 17 jenv add /opt/homebrew/opt/openjdk@17 # 添加 OpenJDK 11 jenv add /opt/homebrew/opt/openjdk@11 ```bash 也可以將通過安裝包安裝的所有 JDK(如 Oracle JDK)添加到到 jenv: ```bash jenv add /Library/Java/JavaVirtualMachines/*/Contents/Home
添加成功后,jenv 會給每個 JDK 分配一個簡單的名稱(如 11.0、17.0 等),你可以用 jenv versions 查看:
smarsi:JavaVirtualMachines smartsi$ jenv versions * system (set by /Users/smartsi/.jenv/version) 1.8 1.8.0.461 11 11.0 11.0.27 17 17.0 17.0.15 openjdk64-11.0.27 openjdk64-17.0.15 oracle64-1.8.0.461
3. 管理 JDK 版本
3.1 設(shè)置全局默認(rèn)版本
可以通過 jenv global xxx 命令來設(shè)置全局默認(rèn)版本:
smarsi:~ smartsi$ java -version java version "1.8.0_461" Java(TM) SE Runtime Environment (build 1.8.0_461-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode) smarsi:~ smartsi$ jenv global 17.0 smarsi:~ smartsi$ java -version openjdk version "17.0.15" 2025-04-15 OpenJDK Runtime Environment Homebrew (build 17.0.15+0) OpenJDK 64-Bit Server VM Homebrew (build 17.0.15+0, mixed mode, sharing) smarsi:~ smartsi$ jenv global 1.8 smarsi:~ smartsi$ java -version java version "1.8.0_461" Java(TM) SE Runtime Environment (build 1.8.0_461-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode)
上述的 jenv global 17.0 命令會將系統(tǒng)默認(rèn) Java 版本設(shè)置為 17.0,后續(xù)所有新打開的終端都會使用此版本。
3.2 為當(dāng)前目錄設(shè)置局部版本
可以通過 jenv local xxx 命令為當(dāng)前目錄設(shè)置局部版本,進(jìn)入你的項目目錄(例如,/opt/workspace/datavines),運行:
smarsi:~ smartsi$ cd /opt/workspace/datavines smarsi:datavines smartsi$ jenv local 17.0 smarsi:datavines smartsi$ smarsi:datavines smartsi$ java -version openjdk version "17.0.15" 2025-04-15 OpenJDK Runtime Environment Homebrew (build 17.0.15+0) OpenJDK 64-Bit Server VM Homebrew (build 17.0.15+0, mixed mode, sharing)
上述的 jenv local 17.0 命令會將 /opt/workspace/datavines 目錄的 Java 版本設(shè)置為 17.0。這會在當(dāng)前目錄下生成一個 .java-version 文件,進(jìn)入該目錄時自動切換為 JDK 17,退出目錄后恢復(fù)為全局版本。
3.3 為當(dāng)前 shell 會話臨時設(shè)置版本
該設(shè)置只對當(dāng)前終端窗口有效,關(guān)閉后失效:
jenv shell 17.0
4. 卸載 JDK 或從 jenv 中移除
如果要從 jenv 中移除某個 JDK(不卸載 JDK 本身),可以運行 jenv remove xxx 命令:
smarsi:~ smartsi$ jenv remove 11.0 JDK 11.0 removed
如果要徹底卸載 JDK(如通過 Homebrew 安裝的),可以運行 brew uninstall xxx 命令:
smarsi:~ smartsi$ brew uninstall openjdk@11 Uninstalling /opt/homebrew/Cellar/openjdk@11/11.0.27... (667 files, 310.4MB)
5. 配置 jenv 插件(推薦)
為了確保 JAVA_HOME 環(huán)境變量也能自動切換,建議啟用 export 插件:
smarsi:~ smartsi$ jenv enable-plugin export You may restart your session to activate jenv export plugin export plugin activated
重啟 shell 使配置生效。全局 Java 版本為 1.8,我們單獨為 /opt/workspace/datavines 目錄設(shè)置為 17.0,查看演示效果:
smarsi:~ smartsi$ cd /opt/workspace/ smarsi:workspace smartsi$ smarsi:workspace smartsi$ echo $JAVA_HOME /Users/smartsi/.jenv/versions/1.8 smarsi:workspace smartsi$ smarsi:workspace smartsi$ cd datavines smarsi:datavines smartsi$ smarsi:datavines smartsi$ echo $JAVA_HOME /Users/smartsi/.jenv/versions/17.0
6. 總結(jié)
通過 jenv,你可以輕松管理多個 JDK 版本,在不同項目間無縫切換,而無需手動修改環(huán)境變量。配合 Homebrew 安裝 JDK,整個過程非常流暢?,F(xiàn)在你可以愉快地在多個 Java 版本之間切換工作了!
到此這篇關(guān)于通過Jenv管理多JDK版本的文章就介紹到這了,更多相關(guān)Jenv管理多JDK版本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java多線程編程必備volatile與synchronized深入理解
這篇文章主要介紹了java多線程編程必備volatile與synchronized的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
BeanFactory和FactoryBean的區(qū)別示例詳解
這篇文章主要為大家介紹了BeanFactory和FactoryBean的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Java報錯sun.misc.Unsafe.park(Native Method)問題
這篇文章主要介紹了Java報錯sun.misc.Unsafe.park(Native Method)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java實現(xiàn)FTP文件的上傳和下載功能的實例代碼
FTP 是File Transfer Protocol(文件傳輸協(xié)議)的英文簡稱,而中文簡稱為“文傳協(xié)議”。接下來通過本文給大家實例講解Java實現(xiàn)FTP文件的上傳和下載功能,需要的的朋友一起看看吧2016-11-11
Java如何使用ConfigurationProperties獲取yml中的配置
這篇文章主要介紹了Java如何使用ConfigurationProperties獲取yml中的配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Java實現(xiàn)輕松提取word和pdf文檔內(nèi)容
這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)輕松提取word和pdf文檔內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-10-10

