最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從安裝到多版本切換詳解如何使用jenv管理Java環(huán)境

 更新時間:2026年04月22日 08:28:44   作者:FreeCultureBoy  
在 macOS 開發(fā)環(huán)境里,Java 的痛點(diǎn)通常不是怎么裝,而是怎么同時管理多個版本,這篇文章將從安裝到多版本切換詳解如何使用jenv管理Java環(huán)境,感興趣的小伙伴可以了解下

在 macOS 開發(fā)環(huán)境里,Java 的痛點(diǎn)通常不是“怎么裝”,而是“怎么同時管理多個版本”。不同項(xiàng)目可能依賴 JDK 8、17、21,直接改 JAVA_HOME 容易混亂,也不利于團(tuán)隊協(xié)作。jenv 的作用就是把 Java 版本切換這件事標(biāo)準(zhǔn)化。

需要先明確一點(diǎn):jenv 不負(fù)責(zé)安裝 JDK,它只負(fù)責(zé)管理和切換已經(jīng)安裝好的 JDK。JDK 本體可以通過 Homebrew 安裝,BellSoft Liberica 是一個常見且穩(wěn)定的發(fā)行版來源。

給 AI Agent 的提示詞:

使用 Homebrew 安裝 jenv 和所需 JDK(如 brew tap bell-sw/liberica && brew install --cask liberica-jdk21),將 jenv 初始化配置加入 shell,執(zhí)行 jenv add 注冊 JDK 后通過 jenv globaljenv local 設(shè)置默認(rèn) Java 環(huán)境。

一、安裝 jenv

在 macOS 上,可以直接通過 Homebrew 安裝:

brew install jenv

安裝完成后,需要把 jenv 初始化腳本加入 shell 配置文件。以 zsh 為例,將下面兩行加入 ~/.zshrc

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

如果希望 JAVA_HOME 能隨著 jenv 切換自動更新,還需要啟用 export 插件:

jenv enable-plugin export

然后重新加載 shell:

exec $SHELL -l

可以用下面的命令檢查 jenv 是否加載正常:

jenv doctor

如果輸出里顯示 Java binaries in path are jenv shimsJenv is correctly loaded,說明配置已經(jīng)生效。

二、使用 Homebrew 安裝 Liberica JDK

如果選擇 BellSoft Liberica 作為 JDK 發(fā)行版,先添加 tap:

brew tap bell-sw/liberica

然后安裝需要的版本。比如安裝 JDK 21:

brew install --cask liberica-jdk21

常見安裝命令如下:

brew install --cask liberica-jdk8
brew install --cask liberica-jdk11
brew install --cask liberica-jdk17
brew install --cask liberica-jdk21

如果需要更小體積或更完整的變體,也可以選擇:

brew install --cask liberica-jdk21-lite
brew install --cask liberica-jdk21-full

在 macOS 上,這類 cask 安裝的 JDK 通常位于:

/Library/Java/JavaVirtualMachines/

安裝后可以查看系統(tǒng)識別到的 JDK:

/usr/libexec/java_home -V

三、把已安裝的 JDK 加入 jenv

安裝完 JDK 后,需要手動把它注冊到 jenv。例如注冊 Liberica JDK 21:

jenv add /Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home

注冊完成后查看版本列表:

jenv versions

通常會看到多個別名,例如:

21
21.0
21.0.10
bellsoft64-21.0.10

這意味著同一個 JDK 已經(jīng)以多個可用名稱加入 jenv,后續(xù)切換時可以使用簡寫版本號,也可以使用完整版本名。

四、使用 jenv 管理 Java 版本

jenv 支持三種作用域的版本切換:全局、目錄級、當(dāng)前 shell。

設(shè)置全局默認(rèn)版本:

jenv global 21

這會把 JDK 21 設(shè)為整臺機(jī)器默認(rèn)使用的 Java 版本。

為某個項(xiàng)目目錄設(shè)置版本:

jenv local 17

執(zhí)行后,當(dāng)前目錄會生成一個 .java-version 文件。以后只要進(jìn)入這個目錄,jenv 就會自動切換到對應(yīng)版本。這種方式非常適合項(xiàng)目倉庫,可以直接把 .java-version 提交到 Git 中,讓團(tuán)隊統(tǒng)一 JDK 版本。

僅在當(dāng)前終端會話中臨時切換:

jenv shell 8

這適合臨時執(zhí)行某些舊項(xiàng)目命令,不會影響全局和目錄配置。

五、驗(yàn)證當(dāng)前生效的 Java 版本

切換完成后,建議立即驗(yàn)證:

jenv version
java -version
echo $JAVA_HOME
jenv which java

其中:

  • jenv version 用來查看當(dāng)前生效版本
  • java -version 用來確認(rèn) JVM 版本
  • echo $JAVA_HOME 用來確認(rèn)環(huán)境變量是否正確
  • jenv which java 用來查看當(dāng)前 java 實(shí)際指向的路徑

如果 export 插件已啟用,JAVA_HOME 應(yīng)該會指向 ~/.jenv/versions/... 下的版本目錄。

六、常用命令總結(jié)

日常使用中,最常見的命令包括:

jenv doctor
jenv versions
jenv add /path/to/jdk
jenv global 21
jenv local 17
jenv shell 8
jenv rehash
jenv which java

這些命令基本覆蓋了安裝后的主要維護(hù)和切換場景。

七、推薦的實(shí)踐方式

比較穩(wěn)妥的用法通常是:

  • 全局默認(rèn)版本設(shè)為當(dāng)前主力開發(fā)版本,例如 JDK 21
  • 老項(xiàng)目在倉庫根目錄使用 jenv local 8jenv local 17
  • .java-version 提交到倉庫
  • 不再手動維護(hù)固定的 JAVA_HOME,交給 jenv 管理

這樣做的好處是,系統(tǒng)默認(rèn)版本清晰,項(xiàng)目版本隔離明確,團(tuán)隊成員進(jìn)入項(xiàng)目后行為一致。

八、常見問題排查

如果 jenv doctor 報錯 Java binary in path is not in the jenv shims,通常是 PATH 順序不對。需要確保:

export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

已經(jīng)加入 shell 配置,并且生效后的 java 優(yōu)先指向 ~/.jenv/shims/java。

如果 JDK 已安裝但 jenv add 后看不到版本,可以先確認(rèn) JDK 路徑是否正確,再執(zhí)行:

jenv rehash

如果 JAVA_HOME 沒有跟著切換,通常是因?yàn)闆]有啟用 export 插件。

九、針對 Apple Silicon Mac 的額外提醒

在 Apple Silicon 的 macOS 上,如果你已經(jīng)正確安裝了 jenv 和 JDK,但 java -version 一啟動就崩潰,例如出現(xiàn) SIGBUS、CodeHeap::allocate 之類錯誤,那么問題往往不在 jenv,而在系統(tǒng)安全狀態(tài)。

這類問題在 OpenJDK 上有已知案例,尤其是在 macOS arm64 且 SIP 被關(guān)閉時更容易出現(xiàn)。如果你的機(jī)器開啟了異常的啟動參數(shù),或者關(guān)閉了 System Integrity Protection,即使 jenv 配置完全正確,JVM 本體依然可能崩潰。這種情況下,應(yīng)該先排查系統(tǒng)層面的 SIP 和 boot-args,而不是繼續(xù)重復(fù)安裝 jenv 或 JDK。

到此這篇關(guān)于從安裝到多版本切換詳解如何使用jenv管理Java環(huán)境的文章就介紹到這了,更多相關(guān)jenv管理Java環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security基本原理詳解

    Spring Security基本原理詳解

    這篇文章主要介紹了Spring Security基本原理詳解,springsecurity底層實(shí)現(xiàn)為一條過濾器鏈,就是用戶請求進(jìn)來,判斷有沒有請求的權(quán)限,拋出異常,重定向跳轉(zhuǎn),需要的朋友可以參考下
    2023-05-05
  • JMeter連接Mysql數(shù)據(jù)庫的實(shí)現(xiàn)步驟

    JMeter連接Mysql數(shù)據(jù)庫的實(shí)現(xiàn)步驟

    本文主要介紹了JMeter操作Mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java反轉(zhuǎn)數(shù)組輸出實(shí)例代碼

    Java反轉(zhuǎn)數(shù)組輸出實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java反轉(zhuǎn)數(shù)組輸出以及利用Java實(shí)現(xiàn)字符串逆序輸出的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • JDK線程池和Spring線程池的使用實(shí)例解析

    JDK線程池和Spring線程池的使用實(shí)例解析

    這篇文章主要介紹了JDK線程池和Spring線程池的使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java中的動態(tài)數(shù)組和棧Vector Stack使用區(qū)別介紹

    Java中的動態(tài)數(shù)組和棧Vector Stack使用區(qū)別介紹

    這篇文章主要為大家介紹了Java中的動態(tài)數(shù)組和棧Vector Stack使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 關(guān)于springcloud報錯報UnsatisfiedDependencyException的問題

    關(guān)于springcloud報錯報UnsatisfiedDependencyException的問題

    這篇文章主要介紹了關(guān)于springcloud報錯報UnsatisfiedDependencyException的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用Maven打包時排除指定的目錄或指定的類

    使用Maven打包時排除指定的目錄或指定的類

    在maven項(xiàng)目中,通過修改pom.xml文件,在maven-compiler-plugin的configuration>excludes節(jié)點(diǎn)下添加排除匹配條件,可以剔除掉生產(chǎn)包中的測試類,注意使用**表示多級目錄匹配,*表示一級目錄匹配
    2024-11-11
  • JAVA中StackOverflowError錯誤的解決

    JAVA中StackOverflowError錯誤的解決

    這篇文章主要介紹了JAVA中StackOverflowError錯誤的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java報錯:javax.xml.bind.JAXBException:?JAXB解決辦法

    java報錯:javax.xml.bind.JAXBException:?JAXB解決辦法

    這篇文章主要介紹了java報錯:javax.xml.bind.JAXBException:?JAXB的解決辦法,文中通過示例提出多種解決方案,幫助開發(fā)者快速定位并解決問題,需要的朋友可以參考下
    2025-05-05
  • 在JAR文件中找不到主清單屬性的原因與解決方案

    在JAR文件中找不到主清單屬性的原因與解決方案

    在Java中,一個JAR文件通常包含一個名為MANIFEST.MF的清單文件,這個文件定義了關(guān)于JAR文件的各種元數(shù)據(jù),然而,有時我們可能會遇到一個問題,那就是在JAR文件中找不到主清單屬性,本文給大家介紹了JAR文件中找不到主清單屬性的原因和解決方案,需要的朋友可以參考下
    2024-04-04

最新評論

大同市| 阳信县| 内乡县| 柳江县| 寿宁县| 临清市| 曲水县| 吴桥县| 托里县| 梧州市| 赫章县| 凭祥市| 平利县| 岐山县| 红原县| 泰来县| 新巴尔虎左旗| 滁州市| 镇巴县| 大渡口区| 铜川市| 雷山县| 牡丹江市| 广德县| 台湾省| 琼结县| 崇州市| 田林县| 基隆市| 商洛市| 买车| 宁阳县| 福鼎市| 西藏| 崇礼县| 景宁| 凌源市| 阿鲁科尔沁旗| 榆树市| 资源县| 柞水县|