0. 基礎環境
類別:筆記本
硬件:Intel,Amd
系統:Windows 11 23H2
關鍵詞:
Windows,SDKMAN,Java,JDK,Maven,Gradle
1.背景
前端有nvm,python有miniconda,miniforge等,java呢?java在Linux,Macos下有SDKMAN以及其他的版本管理工作,SDKMAN好用,但不直接支持Windows,本文通過深度,摸索出一個可以在Windows下使用的SDKMAN方式。
2.基於msys2工具
推薦此方式
2.1. msys2簡介
MSYS2(Minimal SYStem 2)是一個集成了大量的GNU工具鏈、工具和庫的開源軟件包集合。它提供了一個類似於Linux的shell環境,可以在Windows系統中編譯和運行許多Linux應用程序和工具。
MSYS2基於MinGW-w64平台,提供了一個完整的開發環境,包括GCC編譯器、GDB調試器、Make、Git版本控制系統和許多其他開發工具。除了常用的開發庫和工具之外,MSYS2還提供了許多專門針對Windows平台的庫和工具,方便開發人員進行跨平台開發和移植工作。
由於MSYS2擁有比較完整的Linux工具鏈和庫,因此它成為了許多跨平台開發和移植項目的首選工具。另外,使用MSYS2也可以輕鬆地在Windows系統中搭建一個類似於Linux的軟件開發環境,方便開發人員進行開發和調試工作。
2.2. 安裝與配置
進入MSYS2(https://www.msys2.org/)下載
安裝msys2後,對應的用户目錄"msys2安裝目錄\home\windows用户名"
運行msys2 ucrt64 終端,然後在其操作
pacman -S zip unzip #安裝zip,unzip
curl -s "https://get.sdkman.io" | bash #安裝sdkman
source "$HOME/.sdkman/bin/sdkman-init.sh" #環境變量即時生效
sdk version #版本查看
sdk install java 17.0.10-oracle #安裝jdk
位置:C:\msys64\home\long.sdkman\candidates\java\current
2.2. Windows環境變量配置參考
進入界面進行環境變量設置
參考變量與值設定
JAVA_HOME: C:\msys64\home\long\.sdkman\candidates\java\current
Path: %JAVA_HOME%\bin
CLASSPATH:.,%JAVA_HOME%\lib\tool.jar;%JAVA_HOME%\lib\dt.jar
2.3 結果確認
因為windows配置的current,因此需要切換版本時,直接在msys2命令台切換即可。
3. 基於WSL
注意:此方式僅限WSL內使用,使用方式同Linux
友情提醒:安裝sdkman,並指定sdkman安裝位置到C盤根目錄sdkman中,取代默認wsl主機中的~/.sdkman ,這樣windows也可以正常訪問(java這事訪問也沒有意義,因為下載下來的是Linux的命令,無法執行)。因為默認情況下,wsl主機中可以直接訪問的所有,而windows訪問wsl則需要通過\這種非文件協議,導致不方便
sudo apt install zip unzip
curl -s "https://get.sdkman.io" | bash #安裝sdkman
#export SDKMAN_DIR="/mnt/c/sdkman" && curl -s "https://get.sdkman.io" | bash #安裝sdkman,並指定sdkman安裝位置到C盤根目錄sdkman中,取代默認wsl主機中的~/.sdkman ,這樣windows也可以正常訪問(java這事訪問也沒有意義,因為下載下來的是Linux的命令,無法執行)。因為默認情況下,wsl主機中可以直接訪問的所有,而windows訪問wsl則需要通過\\這種非文件協議,導致不方便
source "$HOME/.sdkman/bin/sdkman-init.sh" #環境變量即時生效
sdk version #版本查看
sdk install java 17.0.10-oracle #安裝jdk
安裝後確認其位置
whereis java
顯示在用户主目錄的.sdkman/candidates/java/17.0.10-oracle/bin/java
直接在地址欄訪問,這裏為Linux根目錄,進入java目錄,也是Linux版本的java,這個和msys2不同,在msys2進去java的目錄是windows版本的java
\\wsl.localhost\Ubuntu
寫在最後
SDKMAN很好用,但Windows不能直接用,通過msys2算是一個很好的解決方式了。
個人主頁:
https://segmentfault.com/u/code4world/articles
https://twitter.com/xiaohelong
https://github.com/xiaohelong
聯繫郵箱:1179611323@qq.com
發行日志:
20240412 首發