用sdkman管理多個jdk切換

chaiwangbing32發表於2024-10-13

前言

最近專案前後端進行升級,需要在jdk8和jdk17兩個版本切換。最簡單的是透過手動切換,但切換過程太繁瑣,修改環境變數,達到切換目的。於是嘗試其它解決方案,最終確實使用sdkman工具。

sdkman 是一款面向Java開發者的命令列工具,旨在簡化操作系統上SDKs的管理。支援跨平臺使用,提供便捷的版本控制和切換功能,透過維護候選SDK列表,讓使用者能夠輕鬆安裝、更新和解除安裝各類軟體開發工具包。

下面詳細介紹windows下和linux下安裝過程。

(1)、Windows 安裝

目前 Windows 有兩種安裝方式,WSL 和 Git Bash 的方式,Git 大家電腦中應該都有安裝,因此下面基於 Git Bash 進行安裝 sdkman

1、安裝前準備:首先安裝 sdkman 會使用到 unzip、zip、curl、sed 命令, Git缺少 zip :

zip -v

如果未找到,下載 zip 包:

https://sourceforge.net/projects/gnuwin32/files/zip/3.0/

下載後,將解壓後 bin 目錄下的 zip.exe 複製到 Git 安裝目錄下 mingw64/bin 目錄下:

同時 zip 還依賴 bzip2 ,因此還要下載 bzip2 包:

https://sourceforge.net/projects/gnuwin32/files/bzip2/1.0.5/

下載後,將解壓後 bin 目錄下的 bzip2.dll 複製到 Git 安裝目錄下 mingw64/bin 目錄下:

然後再次嘗試 zip 命令,可以看到已經可以了:

2、安裝sdkman:接下來下載安裝 sdkman ,在 Git Bash 中執行如下操作:

curl -s "https://get.sdkman.io" | bash

安裝完成後,將 sdkman 新增到環境變數中:

source "$HOME/.sdkman/bin/sdkman-init.sh"

每次啟動終端時自動載入 sdkman,將以下行新增到.zshrc檔案中:

echo 'source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.zshrc

重新載入 .zshrc

source ~/.zshrc

驗證環境:

sdk version

3、sdkman 使用

3.1 檢視所有可用的SDK

sdk list

可以看到非常多的應用,而不限於 JDK 。

3.2 檢視所有指定型別可用的SDK:

sdk list java

3.3 安裝指定型別版本的SDK:

sdk install java 21.0.2-open

3.4 切換並使用指定型別版本的SDK

sdk use java 21.0.2-open

驗證 java 版本:

java --version

3.5 設定預設版本

sdk default java 21.0.2-open

3.6 檢視當前使用的 SDK

sdk current

3.7 檢視當前使用的指定型別的 SDK

sdk current java

3.8 檢視 SDK 安裝目錄

sdk home java 21.0.2-open

3.8 解除安裝指定型別版本的SDK

sdk uninstall java 21.0.2-open

3.9 升級 sdkman

sdk selfupdate

2)、Linux下安裝sdkman

Windows下安裝過程是一樣的,linux系統預設缺少一些命令,我們需要提前安裝好。

2.1.需要安裝curl,unzip,zip

sudo apt-get install curl

sudo apt-get install unzip

sudo apt-get install zip

2.2安裝sdkman

curl -s "https://get.sdkman.io" | bash

2.3安裝完成後執行

source "$HOME/.sdkman/bin/sdkman-init.sh"

2.4驗證

sdk version

sdkman會自動為設定相應的環境變數。如果想確保在所有終端會話中都使用 sdkman設定的 Java 版本,可以手動設定 JAVA_HOME 環境變數。在 .zshrc 檔案中新增以下行:

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

export PATH="$JAVA_HOME/bin:$PATH"

重新載入 .zshrc:

source ~/.zshrc

3)、常見問題:

cmd命令視窗直接java -version 找不到命令,需要在環境變數設定路徑:

JDK安裝路徑預設情況下在$HOME/.sdkman/candidates/java/current/bin,具體路徑可以透過命令在 Git Bash 中檢視:

echo "$HOME/.sdkman/candidates/java/current/bin"

/c/Users/XXX/.sdkman/candidates/java/current/bin

注:XXX是你的使用者名稱

3.1配置環境變數

操作步驟:我的電腦-》右鍵屬性-》高階系統設定-》環境變數-》系統環境-》系統變數

新增: JAVA_HOME:C:\Users\Administrator\.sdkman\candidates\java\current

Path 中新增:%JAVA_HOME%\bin

3.2驗證是否生效

開啟終端,輸入java -version ,驗證是否是自己剛剛安裝的版本

java -version

4)、解除安裝 sdkman

4.1. 刪除 sdkman 目錄

刪除 sdkman 安裝目錄:

rm -rf ~/.sdkman

4.2. 移除配置檔案中的 sdkman 配置

編輯的 shell 配置檔案(例如 .zshrc),刪除與 sdkman 相關的行:

nano ~/.zshrc

找到並刪除以下行:

source "$HOME/.sdkman/bin/sdkman-init.sh"

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

export PATH="$JAVA_HOME/bin:$PATH"

儲存並退出(在 nano 中使用 Ctrl+X 然後按 Y 確認儲存)。

4.3.重新載入 shell 配置檔案

刪除配置行後,重新載入 shell 配置檔案:

source ~/.zshrc

5)、jdk版本選擇

Jdk list java 列出來的jdk版本,都是在openJdk上擴充套件的,基本功能都差不多,根據需要自行下載,目前在開發過程中主要用到的是jdk8、jdk17、jdk21等,比如在本人電腦上安裝了這三個版本:8.0.422-zulu、17.0.12-zulu、21.0.2-open。

切換到21,需要執行下面兩個命令:

sdk use java 21.0.2-open

sdk default java 21.0.2-open

下載安裝包在:C:\Users\Administrator\.sdkman\tmp目錄下

安裝位置:C:\Users\Administrator\.sdkman\candidates\java目錄下

Current是當前使用的jdk。

提示:剛開始安裝sdkman選擇d盤指定目錄,但zshrc檔案修改配置不行,折騰半天,最後還是換回了預設路徑。不知道為什麼,沒再研究.....

6)、idea配置

注意:Idea中配置jdk,和手動安裝的設定一樣,設定成current目錄不行,切換後,無法自動切換。所以如果需要在各個jdk版本間切換,最好在sdk中都選擇上,sdkman切換後,idea手動再選擇下:

Sdks都新增上:

Project中指定當前使用中的jdk:

啟動入口,jdk如果沒有改過來,也需要手動切換下:

至此,安裝sdkman管理多個jdk版本,並在idea中使用過程就完結了。

在安裝過程中,可能會碰到其它問題,系統環境不同,問題都可能不盡相同,根據不同問題查詢解決方案,實現sdkman對jdk管理的目的。

sdkman工具,是非常好用的跨平臺管理jdk工具,希望能幫助到切換jdk煩惱的你!

參考文章:

https://blog.csdn.net/crazywkl/article/details/142353085

https://blog.csdn.net/qq_43692950/article/details/140816049

相關文章