Linux上安裝多個JDK版本,需要配置環境變量嗎

簡短回答:不需要同時配置多個 JDK 的 JAVA_HOMEPATH,但你可以安裝多個版本,并通過靈活的方式在它們之間切換。


文章目錄

      • ? 正確做法:安裝多個 JDK,但只讓一個生效(通過環境變量或 `alternatives`)
        • 📌 為什么不能同時配置多個?
    • ? 推薦方案一:使用 `alternatives` 管理(推薦,適合系統級切換)
      • 1. 安裝多個 JDK(示例)
      • 2. 使用 `alternatives` 注冊
      • 3. 切換版本
      • ? 優點
    • ? 推薦方案二:只配置一個 `JAVA_HOME`(適合固定環境)
    • ? 推薦方案三:按用戶或項目配置(適合開發環境)
    • ? 總結:最佳實踐
      • 🔁 驗證當前使用的是哪個 JDK

? 正確做法:安裝多個 JDK,但只讓一個生效(通過環境變量或 alternatives

📌 為什么不能同時配置多個?
  • JAVA_HOME 是一個環境變量,只能指向一個路徑
  • PATH 中的 bin 目錄如果包含多個 java,系統只會使用第一個找到的
  • 如果你在 PATH 中同時加入多個 JDK 的 bin,容易導致混亂,難以控制使用的是哪個版本。

? 推薦方案一:使用 alternatives 管理(推薦,適合系統級切換)

這是 CentOS/RHEL 系統的標準做法,可以輕松切換默認的 javajavac 等命令。

1. 安裝多個 JDK(示例)

假設你已經安裝了:

  • JDK 8: /usr/lib/jvm/jdk8u432-b05
  • JDK 11: /usr/lib/jvm/temurin-11-jdk
  • JDK 21: /usr/lib/jvm/temurin-21-jdk

2. 使用 alternatives 注冊

# 注冊 java 命令
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jdk8u432-b05/bin/java 1
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-11-jdk/bin/java 2
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/temurin-21-jdk/bin/java 3# 注冊 javac 命令(可選)
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk8u432-b05/bin/javac 1
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-11-jdk/bin/javac 2
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-21-jdk/bin/javac 3

3. 切換版本

sudo alternatives --config java

會彈出菜單讓你選擇使用哪個 JDK:

There are 3 programs which provide 'java'.Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jdk8u432-b05/bin/java2           /usr/lib/jvm/temurin-11-jdk/bin/java3           /usr/lib/jvm/temurin-21-jdk/bin/javaEnter to keep the current selection[+], or type selection number: 

輸入編號即可切換。

? 優點

  • 全局生效,所有用戶都使用統一版本。
  • 切換簡單,命令清晰。
  • 符合 Linux 系統管理規范。

? 推薦方案二:只配置一個 JAVA_HOME(適合固定環境)

如果你確定長期使用某個版本(如 JDK 8),可以只配置一個環境變量。

# /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/jdk8u432-b05
export PATH=$JAVA_HOME/bin:$PATH

其他 JDK 只需解壓到 /usr/lib/jvm/ 目錄即可,不需要配置環境變量,需要時手動調用:

# 臨時使用 JDK 11
/usr/lib/jvm/temurin-11-jdk/bin/java -version# 或臨時切換
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
$JAVA_HOME/bin/java -version

? 推薦方案三:按用戶或項目配置(適合開發環境)

不同用戶或項目使用不同 JDK:

# 用戶家目錄下的 .bashrc
# 用戶 A 用 JDK 8
export JAVA_HOME=/usr/lib/jvm/jdk8u432-b05# 用戶 B 用 JDK 11
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk

或者在項目腳本中指定:

#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/temurin-11-jdk
./mvnw compile

? 總結:最佳實踐

方案適用場景是否需要配置多個環境變量
alternatives系統管理員,全局切換? 只注冊,不同時生效
單一 JAVA_HOME固定使用一個版本? 只配置一個
手動調用路徑臨時使用其他版本? 不配置,直接調用
用戶級配置多用戶不同需求? 每個用戶可不同
項目級腳本CI/CD、構建腳本? 按需設置

🔁 驗證當前使用的是哪個 JDK

java -version
echo $JAVA_HOME
which java

? 結論:

不需要同時配置多個 JDK 的環境變量!

正確做法是:

  1. 安裝多個 JDK 到不同目錄(如 /usr/lib/jvm/ 下)。
  2. 使用 alternativesJAVA_HOME 切換當前默認版本
  3. 其他版本按需手動調用。

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

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

相關文章

MySQL有哪些高可用方案

大家好,我是鋒哥。今天分享關于【MySQL有哪些高可用方案】面試題。希望對大家有幫助; MySQL有哪些高可用方案? 超硬核AI學習資料,現在永久免費了! MySQL 高可用方案是指確保 MySQL 數據庫在面對硬件故障、網絡故障、負載過重等…

【Windows】Windows平臺基于加速地址安裝vcpkg并集成到Visual Studio 2017

基礎運行環境 啟動: 適用于 VS 2017 的 x64 本機工具命令提示 ninja 下載壓縮包 https://gh-proxy.com/https:/github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip 直接解壓到c:/Windows (無需配置環境變量) CMake 下載安裝包 https://gh-proxy…

LLMs之MCP:Chrome MCP的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之MCP:Chrome MCP的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 Chrome MCP的簡介 1、特點 2、與類似項目的比較 Chrome MCP的安裝和使用方法 1、安裝 2、使用方法 加載 Chrome 擴展 與 MCP 協議客戶端一起使用 使用 STDIO 連接(替代方…

【Java EE】多線程-初階 synchronized 關鍵字 - 監視器鎖 monitor lock

synchronized 關鍵字 - 監視器鎖 monitor lock5. synchronized 關鍵字 - 監視器鎖 monitor lock5.1 synchronized 的特性5.2 synchronized 使??例5.3 Java 標準庫中的線程安全類本節?標? 掌握 synchronized關鍵字5. synchronized 關鍵字 - 監視器鎖 monitor lock &#xf…

Java多線程:從基礎到實戰

引言多線程是Java并發編程的核心技術之一,廣泛應用于服務器開發、數據處理、實時系統等領域。通過多線程,程序可以充分利用CPU資源,提高執行效率,同時處理多個任務。本文將從多線程的基本概念、實現方式、線程狀態、同步與通信到常…

list集合可以一邊遍歷一遍修改元素嗎?

今天看來一下Java中list集合部分的八股,發現了一個以前沒注意過的問題,記錄一下list可以一邊遍歷一邊修改元素嗎?答:在 Java 中,List在遍歷過程中是否可以修改元素取決于遍歷方式和具體的List實現類。①:對…

Infusing fine-grained visual knowledge to Vision-Language Models

Infusing fine-grained visual knowledge to Vision-Language Models Authors: Nikolaos-Antonios Ypsilantis, Kaifeng Chen, Andr Araujo, Ond?ej Chum Deep-Dive Summary: 視覺-語言模型中注入細粒度視覺知識 摘要 大規模對比預訓練產生了強大的視覺-語言模型&#xf…

RK3576賦能無人機巡檢:多路視頻+AI識別引領智能化變革

隨著工業巡檢任務的復雜度不斷提升,無人機逐漸取代傳統人工,成為電力、能源、林業、農業等行業的“高空作業主力”。然而,巡檢并非簡單的拍攝和回放,它要求無人機實時采集多路畫面、快速分析異常,并穩定回傳數據。這對…

ollama Modelfile 文件生成

輸入 根據如下TEMPLATE和params寫一個modelfile文件&#xff0c;TEMPLATE為&#xff1a;{{- $lastUserIdx : -1 -}} {{- range $idx, $msg : .Messages -}} {{- if eq $msg.Role “user” }}{{ $lastUserIdx $idx }}{{ end -}} {{- end }} {{- if or .System .Tools }}<|i…

關聯規則挖掘2:FP-growth算法(Frequent Pattern Growth,頻繁模式增長)

目錄 一、核心思想&#xff1a;一個形象的比喻 二、核心思想的具體拆解 步驟一&#xff1a;構建FP-tree&#xff08;頻繁模式樹&#xff09; 步驟二&#xff1a;從FP-tree中挖掘頻繁項集 為什么這很高效&#xff1f; 三、總結 核心思想與優勢 適用場景與缺點 四、例題…

在IDEA中DEBUG調試時查看MyBatis-Plus動態生成的SQL語句

在IDEA中DEBUG調試時查看MyBatis-Plus動態生成的SQL語句前言&#xff1a;動態SQL調試的痛與解決方案一、準備工作&#xff1a;調試前的檢查清單二、基礎方法&#xff1a;SqlSessionTemplate斷點調試步驟1&#xff1a;定位SqlSessionTemplate類步驟2&#xff1a;在invoke方法上設…

Linux 文本處理三劍客:awk、grep、sed 完全指南

Linux 文本處理三劍客&#xff1a;awk、grep、sed 完全指南 1. 概述 Linux 系統提供了三個強大的文本處理工具&#xff1a;awk、grep 和 sed&#xff0c;它們各有所長&#xff0c;結合使用可以高效地處理文本數據。 awk&#xff1a;擅長文本分析和格式化輸出&#xff0c;是一…

pyecharts可視化圖表組合組件_Grid:打造專業數據儀表盤

pyecharts可視化圖表組合組件_Grid&#xff1a;打造專業數據儀表盤 目錄pyecharts可視化圖表組合組件_Grid&#xff1a;打造專業數據儀表盤引言圖表1&#xff1a;Grid-Overlap-多X/Y軸示例代碼解析1. 圖表創建2. 多軸配置3. 圖表重疊4. Grid布局效果與應用圖表2&#xff1a;Gri…

【電氣工程學習】

三極管中&#xff1a;集電極C,基極B&#xff0c;發射極E接線&#xff1a;棕正藍負黑信號NPN開關輸出的是我們的0V,也叫低電平PNP開關輸出的是24V,也就是高電平&#xff08;NPN開關導通時&#xff0c;相當于把輸出端“拉”到0V&#xff08;低電平&#xff09;&#xff0c;稱為“…

【嵌入式】CAN通信

CAN 總線最初由博世于1980年代為汽車行業開發&#xff0c;能夠簡化復雜的布線網絡&#xff0c;還確保可靠和安全的數據傳輸。 1.CAN技術解釋 CAN網絡中的每個節點&#xff0c;都是平等的&#xff0c;沒有主次之分&#xff0c;這一點和SPI和I2C不同。每個節點都可以在需要的時…

Apache ShenYu網關與Nacos的關聯及如何配合使用

Apache ShenYu 網關與 Nacos 之間的關系可以概括為 “協作互補”:Nacos 作為 服務注冊與配置中心,為 ShenYu 提供動態的服務發現和配置管理能力,而 ShenYu 作為 流量網關,依賴 Nacos 實現路由信息的動態更新和實時生效。以下是詳細解析: 1. 核心關系圖解 拉取服務列表/路…

【CPP】一個CPP的Library(libXXXcore)和測試程序XXX_main的Demo

一個CPP的Library和測試程序Demo 1. 思路描述 目錄結構 總控CMakeList.txt文件 2. Library代碼實現 2.1 XXXLib.hpp文件(對外的接口定義文件)和XXXLib.cpp文件 2.1.1 XXXLib.hpp文件 2.1.2 XXXLib.cpp文件 2.2 CXXXLibApi.hpp文件和CXXXLibApi.cpp文件(內部的API基類) 2.2.1 CX…

【YashanDB認證】學習YashanDB的探索之路:從入門到實踐

在國產數據庫蓬勃發展的浪潮中&#xff0c;選擇了YashanDB作為技術學習的切入點。這不僅讓我深入了解了數據庫的核心技術&#xff0c;也讓我深刻體會到國產數據庫在性能、可靠性和生態適配上的創新價值。以下是我在學習YashanDB過程中的經驗與感悟。 一、YashanDB基礎介紹 Ya…

element UI 和 element plus 在組件上有哪些不同

Element UI 和 Element Plus 都是基于 Vue 的桌面端 UI 組件庫&#xff0c;由同一團隊&#xff08;餓了么前端團隊&#xff09;開發和維護。Element Plus 是 Element UI 的升級版&#xff0c;專為 Vue 3 設計&#xff0c;而 Element UI 僅支持 Vue 2。以下是它們在組件層面的主…

【3D重建技術】如何基于遙感圖像和DEM等數據進行城市級高精度三維重建?

城市級高精度三維重建是融合多源空間數據&#xff08;遙感圖像、DEM、GIS矢量等&#xff09;、計算機視覺與地理信息處理技術的復雜過程&#xff0c;核心目標是構建包含“地形地物&#xff08;建筑、道路、植被等&#xff09;”的真實、高精度三維場景。其流程可分為數據準備、…