Mac 環境下 JDK 版本切換全指南

概要

在 macOS 上安裝了多個 JDK 后,可以通過系統自帶的 /usr/libexec/java_home 工具來查詢并切換不同版本的 Java。只需在終端中執行 /usr/libexec/java_home -V 列出所有已安裝的 JDK,然后將你想使用的版本路徑賦值給環境變量 JAVA_HOME,并將其添加到 PATH。最后,將這些設置寫入你的 shell 啟動文件(如 ~/.zshrc~/.bash_profile),即可在每次新開終端時自動生效。


一、查詢已安裝的 JDK 版本

  1. 打開 終端,輸入:

    /usr/libexec/java_home -V
    

    該命令會輸出所有已安裝的 Java 虛擬機列表及其安裝路徑,例如:

    Matching Java Virtual Machines (3):17.0.2 (x86_64) "Oracle Corporation" - "Java SE 17.0.2" /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home  1.8.0_202 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home  
    

    上面是一個示例,像我的電腦上裝的jdk就有點亂了
    在這里插入圖片描述


二、臨時切換 JDK 版本

如果僅想在當前終端會話中切換版本,可直接運行:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)  
export PATH="$JAVA_HOME/bin:$PATH"
  • -v 1.8 可替換為你需要的版本號(如 -v 17-v 11.0.2 等)([Stack Overflow][2])
  • 切換后,執行 java -version 即可驗證當前使用的 Java 版本

三、永久切換 JDK 版本

為了在每次打開終端時都自動使用同一版本,需要將上述環境變量配置寫入 shell 啟動文件。

1. 確定使用的 Shell

  • macOS 默認從 macOS Catalina 起采用 Zsh,啟動文件為 ~/.zshrc
  • 如果你使用的是 Bash,則應編輯 ~/.bash_profile~/.bashrc

2. 編輯啟動文件

以 Zsh 為例,打開或創建 ~/.zshrc

vim ~/.zshrc

或者

nano ~/.zshrc

在文件末尾添加:

# 指向 Java 17(示例)像我的電腦上jdk裝的有點亂了,可以指定特定的版本比如17.0.15
export JAVA_HOME=$(/usr/libexec/java_home -v 17.0.15)  
export PATH="$JAVA_HOME/bin:$PATH"

保存并退出(Ctrl+XYEnter/獲取:wq保存(vim的操作))

3. 使配置生效

source ~/.zshrc
java -version

在這里插入圖片描述

此時終端應顯示你指定的 Java 版本信息。


四、使用別名或腳本快速切換(可選)

如果經常在不同項目間切換 JDK,可以在啟動文件中定義別名或函數,例如:

# ~/.zshrc 中
alias java8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8); export PATH="$JAVA_HOME/bin:$PATH"; java -version'
alias java17='export JAVA_HOME=$(/usr/libexec/java_home -v 17); export PATH="$JAVA_HOME/bin:$PATH"; java -version'

這樣在終端中僅需執行 java8java17 即可快速切換版本。


五、可以嘗試:使用 SDKMAN!

sdkman能讓你在 Unix 系統上輕松管理多個軟件開發工具包,像 apt、pip、RVM 和 rbenv一樣工具
也可以理解為node的版本管理的工具nvm一樣的工具軟件
SDKMAN! 是一個管理多種 SDK(包括 Java)版本的工具。安裝后可用一條命令列出并切換 JDK:

sdk list java
sdk use java 17.0.2-tem

這種方式在管理眾多 Java 發行版(Oracle、Temurin、Amazon Corretto 等)時尤為方便。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80458.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中級網絡工程師知識點6

1.堆疊方式可以共享使用交換機背板帶寬;級聯方式可以使用雙絞線將交換機連接在一起 2.光功率計是專門測量光功率大小的儀器,在對光纜進行檢測時,通過在光纜的發送端和接收端分別測量光功率,進而計算出光衰情況。 3.光時域反射計…

動態規劃——烏龜棋

題目描述 解題思路 首先這是一個很明顯的線性dp的題目,很容易發現規律 數據輸入 我們用 h[ N ] 數組存儲每一個格子的分數 用 cnt [ ],數組表示每一中卡片的數目 1,狀態表示 因為這里一個有4種跳躍方式可以選擇 f[ i ][ a ][ b ][ c ][ d…

C#自定義控件-實現了一個支持平移、縮放、雙擊重置的圖像顯示控件

1. 控件概述 這是一個繼承自 Control 的自定義控件,主要用于圖像的顯示和交互操作,具有以下核心功能: 圖像顯示與縮放(支持鼠標滾輪縮放)圖像平移(支持鼠標拖拽)視圖重置(雙擊重置…

C++ map multimap 容器:賦值、排序、大小與刪除操作

概述 map和multimap是C STL中的關聯容器,它們存儲的是鍵值對(key-value pairs),并且會根據鍵(key)自動排序。兩者的主要區別在于: map不允許重復的鍵multimap允許重復的鍵 本文將詳細解析示例代碼中涉及的map操作,包括賦值、排…

AI Agent開發第70課-徹底消除RAG知識庫幻覺(4)-解決知識庫問答時語料“總重復”問題

開篇 “解決知識庫幻覺”系列還在繼續,這是因為:如果只是個人玩玩,像自媒體那些說的什么2小時搭一個知識庫+deepseek不要太香一類的RAG或者是基于知識庫的應用肯定是沒法用在企業級落地上的。 我們真的經歷過或者正在經歷的人都是知道的,怎么可能2小時就搭建完成一個知識…

【DAY22】 復習日

內容來自浙大疏錦行python打卡訓練營 浙大疏錦行 仔細回顧一下之前21天的內容 作業: 自行學習參考如何使用kaggle平臺,寫下使用注意點,并對下述比賽提交代碼 kaggle泰坦里克號人員生還預測

【Docker】Docker Compose方式搭建分布式協調服務(Zookeeper)集群

開發分布式應用時,往往需要高度可靠的分布式協調,Apache ZooKeeper 致力于開發和維護開源服務器,以實現高度可靠的分布式協調。具體內容見zookeeper官網。現代應用往往使用云原生技術進行搭建,如何用Docker搭建Zookeeper集群,這里介紹使用Docker Compose方式搭建分布…

若依框架Consul微服務版本

1、最近使用若依前后端分離框架改造為Consul微服務版本 在這里分享出來供大家參考 # Consul微服務配置參數已經放置/bin/Consul微服務配置目錄 倉庫地址: gitee:https://gitee.com/zlxls/Ruoyi-Consul-Cloud.git gitcode:https://gitcode.c…

BOM知識點

BOM(Browser Object Model)即瀏覽器對象模型,是用于訪問和操作瀏覽器窗口的編程接口。以下是一些BOM的知識點總結: 核心對象 ? window:BOM的核心對象,代表瀏覽器窗口。它也是全局對象,所有全…

什么是遷移學習(Transfer Learning)?

什么是遷移學習(Transfer Learning)? 一句話概括 遷移學習研究如何把一個源領域(source domain)/源任務(source task)中獲得的知識遷移到目標領域(target domain)/目標任…

[創業之路-362]:企業戰略管理案例分析-3-戰略制定-華為使命、愿景、價值觀的演變過程

一、華為使命、愿景、價值觀的演變過程 1、創業初期(1987 - 1994 年):生存導向,文化萌芽 使命愿景雛形:1994年華為提出“10年之后,世界通信行業三分天下,華為將占一份”的宏偉夢想&#xff0c…

Python黑魔法與底層原理揭秘:突破語言邊界的深度探索

Python黑魔法與底層原理揭秘:突破語言邊界的深度探索 開篇:超越表面的Python Python常被稱為"膠水語言",但其真正的威力在于對底層的高度可控性。本文將揭示那些鮮為人知的Python黑魔法,帶你深入CPython實現層面&…

Es的text和keyword類型以及如何修改類型

昨天同事觸發定時任務發現es相關服務報了一個序列化問題, 今天早上捕獲異常將異常堆棧全部打出來看,才發現是聚合的字段不是keyword類型的問題。 到kibbna命令行執行也是一樣的錯誤 使用 /_mapping查看索引的字段類型,才發現userUniqueid是te…

大語言模型 07 - 從0開始訓練GPT 0.25B參數量 - MiniMind 實機訓練 預訓練 監督微調

寫在前面 GPT(Generative Pre-trained Transformer)是目前最廣泛應用的大語言模型架構之一,其強大的自然語言理解與生成能力背后,是一個龐大而精細的訓練流程。本文將從宏觀到微觀,系統講解GPT的訓練過程,…

【Android】從Choreographer到UI渲染(二)

【Android】從Choreographer到UI渲染(二) Google 在 2012 年推出的 Project Butter(黃油計劃)是 Android 系統發展史上的重要里程碑,旨在解決長期存在的 UI 卡頓、響應延遲等問題,提升用戶體驗。 在 Androi…

mvc-ioc實現

IOC 1)耦合/依賴 依賴,是誰離不開誰 就比如上訴的Controller層必須依賴于Service層,Service層依賴于Dao 在軟件系統中,層與層之間存在依賴。我們稱之為耦合 我們系統架構或者設計的一個原則是&#xff…

MATLAB安裝常見問題解決方案

目前新版本的matlab安裝往往需要十幾G的本地安裝容量,例如matlab2022b、matlab2023b, 首先就是要保證本地硬盤空間足夠大,如果沒有足夠的本地內存空間,那么可以嘗試釋放本地硬盤空間,或者安裝所需內存空間較小的舊版本的matlab&am…

程序代碼篇---python獲取http界面上按鈕或者數據輸入

文章目錄 前言 前言 本文簡單接受了python獲取http界面上按鈕或者數據輸入

深入理解 Cortex-M3 特殊寄存器

在上一篇文章中分享了 Cortex-M3 內核寄存器組的相關知識,實際上除了內核寄存器組外,CM3 處理器中還存在多個特殊寄存器,它們分別為 程序狀態寄存器,中斷/異常屏蔽寄存器 和 控制寄存器。 需要注意的是,特殊寄存器未經…

標準庫、HAl庫和LL庫(PC13初始化)

標準庫 (Standard Peripheral Library) c #include "stm32f10x.h"void GPIO_Init_PC13(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode GPIO_…