開發者在開發中如何管理不同JDK版本
我們知道在 NodeJS, React, Python 這些大家熟悉基本工具上,大家都會在不同版本切換作開發,而且也好用的功具可以協助我們,例如 nodejs 的 nvm,n 或是 python 的 conda. 而 Java 的開發環境中,也會有類似的工具:
因此本篇解釋為何使用 SDKMAN 以及使用方式
評估選擇適合的工具
在 Java 的世界中,沒有完全類似於 Python 的 conda
工具,但有一些工具可以用來管理 Java 版本和建立隔離的環境。以下是一些常用的選擇:
- SDKMAN!: 這是一個很受歡迎的 Java 工具版本管理器。它可以讓你在不同的 Java 版本之間輕鬆切換,並且支援 Groovy、Scala、Kotlin 等其他 JVM 語言和工具。SDKMAN! 提供了一個簡潔的命令行界面來安裝、切換和管理多個版本。
- jEnv: jEnv 是一個專門為 Java 環境設計的版本管理工具。它允許你在不同的項目中使用不同的 Java 版本,非常適合需要在多個 Java 版本之間切換的開發者。
- Docker: 雖然 Docker 並非專門為 Java 設計,但它可以用來創建隔離的環境,其中包含特定版本的 Java 和其他依賴。通過 Docker,你可以為每個項目創建一個包含所有必要依賴的容器。
- Maven 和 Gradle 的 Profiles: Maven 和 Gradle 都支援 profiles,這可以讓你為不同的環境指定不同的配置和依賴。雖然它們主要用於依賴管理,但也可以用來在不同的環境中使用不同的 Java 版本。
這些工具各有特點,你可以根據個人需求和項目特性選擇最合適的工具。例如,如果你需要頻繁切換 Java 版本,SDKMAN! 或 jEnv 會是不錯的選擇。如果你需要更完整的環境隔離,則 Docker 可能更合適。
SDKMAN! vs jEnv
當比較 SDKMAN! 和 jEnv 這兩個工具時,我們可以從幾個關鍵方面來探討它們的優缺點:
SDKMAN!
優點
- 廣泛的支援範圍:SDKMAN! 不僅支持多個版本的 Java,還支持 Groovy、Scala、Kotlin 等其他 JVM 語言和工具。
- 易於安裝和使用:SDKMAN! 提供一個直觀的命令行界面,使得安裝和切換版本變得非常簡單。
- 自動更新:SDKMAN! 可以自動檢查並通知可用的新版本,方便用戶保持最新。
- 獨立性:它不依賴於系統的 Java 安裝,可以在用戶空間內獨立運行。
缺點
- 不是環境管理器:SDKMAN! 重點在於管理不同版本的 SDK,而不是創建隔離的開發環境。
- 依賴於網絡:安裝和更新 SDK 需要網絡連接。
jEnv
優點
- 專注於 Java:jEnv 完全專注於管理不同版本的 Java,適合那些只需要管理 Java 版本的場景。
- 項目級別的版本管理:可以輕鬆為每個項目設定不同的 Java 版本,便於多項目開發。
- 簡單的版本切換:jEnv 提供簡潔的命令來切換 Java 版本。
- 與 shell 緊密集成:可以很容易地集成到 Bash 或 Zsh 等常用 shell 中。
缺點
- 功能單一:jEnv 僅用於管理 Java 版本,不支持其他 JVM 語言或工具。
- 安裝過程可能複雜:對於某些用戶來說,jEnv 的安裝和配置可能比 SDKMAN! 更為複雜。
- 缺乏自動更新機制:相比於 SDKMAN!,jEnv 缺少自動檢測和安裝新版本的功能。
總結
選擇 SDKMAN! 或 jEnv 主要取決於你的具體需求:
- 如果你需要管理多種 JVM 語言或工具,並且想要一個易於使用和更新的工具,SDKMAN! 是一個不錯的選擇。
- 如果你主要關注於 Java,並且需要在不同項目間靈活切換 Java 版本,jEnv 可能更適合你。
兩者都是優秀的工具,可以有效地幫助你管理 Java 環境。
註:
「jEnv 僅用於管理 Java 版本,不支持其他 JVM 語言或工具」的意思是,jEnv 這個工具專門設計用來管理不同版本的 Java 執行環境(JRE)和開發環境(JDK)。它的主要功能是讓你在不同的 Java 版本之間進行切換,特別適合於在多個項目中需要使用不同版本的 Java 的情況。
相比之下,jEnv 不具備管理其他基於 Java 虛擬機(JVM)的語言或工具的能力。例如,Groovy、Scala 和 Kotlin 等其他 JVM 語言,或者像 Maven、Gradle 這樣的 Java 构建工具,都不在 jEnv 的管理範圍內。
這與 SDKMAN! 不同,後者不僅可以管理多個版本的 Java,還支持其他多種 JVM 語言和工具的版本管理。這使得 SDKMAN! 更為通用,能夠滿足更廣泛的開發需求。
開始使用 SDKMAN
上手使用 SDKMAN! 是一個相對直觀的過程。以下是一個簡單的指南,幫助你開始使用 SDKMAN!:
Mac/Linux 安裝 SDKMAN!
- 打開終端:首先,打開你的命令行界面。這可能是 Terminal (在 macOS 或 Linux) 或者 Command Prompt/PowerShell (在 Windows)。
- 安裝命令:在你的終端中執行以下命令來安裝 SDKMAN!:
curl -s "https://get.sdkman.io" | bash
- 初始化 SDKMAN!:安裝完成後,你需要執行以下命令來初始化 SDKMAN!:
source "$HOME/.sdkman/bin/sdkman-init.sh"
- 驗證安裝:使用以下命令檢查 SDKMAN! 是否安裝成功:
sdk version
使用 SDKMAN! 管理 Java 版本
列出可用的 Java 版本:要查看所有可用的 Java 版本,使用以下命令:
sdk list java
此命令可以查詢已安裝的有哪些
sdk list java | grep installed
- 安裝特定版本的 Java:從列表中選擇你想要安裝的 Java 版本,並使用以下命令進行安裝,例如安裝 Java 11:
sdk install java 11.0.2-open
- 切換 Java 版本:如果你有多個 Java 版本安裝,可以使用以下命令在它們之間切換,例如切換到 Java 8:
sdk use java 8.0.222-open
- 設置預設 Java 版本:要設置某個版本的 Java 為你的預設版本,使用類似的命令:
sdk default java 11.0.2-open
額外提示
- 查詢幫助:如果你需要獲取更多命令的信息,可以使用
sdk help
命令來查看更多選項和說明。 - 更新 SDKMAN!:要更新 SDKMAN! 到最新版本,可以使用
sdk selfupdate
命令。 - 卸載 SDK:如果你想要卸載某個已安裝的 SDK,例如 Java,可以使用
sdk uninstall java 11.0.2-open
。
這些是基本的步驟和命令,足以讓你開始使用 SDKMAN! 來管理 Java 版本和其他 SDK。隨著使用,你會發現 SDKMAN! 是一個非常強大且靈活的工具,能夠大大簡化 Java 和其他 SDK 的版本管理。
Mac OS X 版本的開發者
當你使用 sdkman 工具安裝了不同java 版本,自己原有系統的 java_home 就被改變,但為了確保Mac OS X 環境一致,所以建議將 sdkman 預設java版本設成跟 Mac OS X 一樣。因此這時候你需要找一下 Mac OS X 真正的JAVA_HOME,以為我例,我會得到此資訊
$ /usr/libexec/java_home
/Users/milochen0418/Library/Java/JavaVirtualMachines/corretto-11.0.21/Contents/Home
我查到一樣跟 corretoo-11.0.21 的版本,因此就可以這樣子安裝
$ sdk install java 11.0.21-amzn
$ sdk default java 11.0.21-amzn
而之後就是想使用不同 java 版本時可以
sdk list java | grep installed
然後再換過去版本
sdk use java 11.0.21-amzn
sdk default java 11.0.2-open