
TL;DR: 需要切換預設版本時,Linux可以使用
update-java-alternatives,Windows可以調整JAVA_HOME;如果需要專案隔離時,可以考慮Conda或Docker。SDKMAN適合在Linux、macOS等Unix-like環境管理多個JDK,Windows則通常需要透過WSL使用。
程式開發隨著歷史的迭代,環境版本的管理也逐漸變得越發重要。首次注意到相關的工具是Node.JS的NVM,其更是已經進入了Node.JS官網推薦的安裝方式之一,此外還有fnm、docker、Brew。
甚至在最近的Python 3. 14中,對於Windows的安裝方式提供了Python install manager,並且宣佈在未來Python 3.16之後不會再提供傳統安裝方式(Windows)。
The Python install manager for Windows is our tool for installing and managing runtimes. The traditional executable installer will stop being released with Python 3.16
nim-lang也有choosenim。我也會透過docker、lxc和conda來偶爾玩玩不同開發環境。
那麼要切換使用的JAVA版本,除了Linux發行版帶的update-java-alternatives和Windows調整JAVA_HOME環境變數外,還可以有什麼方式呢?
如果已經有docker使用經驗,那麼docker是最簡單而且熟悉、安全的選擇。不過自Docker Desktop收費開始,我就沒在Windows使用過Docker(我自己以往使用Docker Desktop的體驗也不是很好,但也有可能受到公司對於Windows管理工具的影響,而非完全是Docker Desktop的問題)。那麼在Windows使用Docker就需要經過Hyper-V或WSL,對於一般Windows使用者來說可能沒那麼容易。
那麼Anaconda或許是Windows下更好的選擇,Anaconda在商用環境下記得同樣有授權問題,那可以選擇較小的miniconda。在ANACONDA.ORG可以找到經過驗證的OpenJDK,其明確說明支援的平臺包含win-64(Windows x64)。
此外我還有查到SDKMAN,不過這個工具我就沒有使用過,提出來給大家自行琢磨。
上述方式都可以配合IDE進行設定,我記得eclipse就是透過JAVA_HOME的方式管理開發專案使用JAVA版本。作爲後續更流行的JetBrains IntelliJ IDEA可能是用類似方式進行設定。
我是透過Emacs和CLI直接進行JAVA開發。這也是為什麼「環境準備可以很簡單」會是我的需求之一。環境準備可以很簡單,在逐步增加複雜設定與更方便使用,也是在對於整個生態有更清晰的理解。
先依照使用情境選擇切換方式:
update-java-alternatives,Windows調整JAVA_HOME。切換完成後,重新開啟終端機並確認以下項目:
java -version,確認目前的Java版本符合預期。javac -version,確認編譯器版本也符合預期。which java;Windows執行where.exe java,確認實際使用的Java執行檔位置。JAVA_HOME,Linux或macOS執行echo "$JAVA_HOME";Windows命令提示字元執行echo %JAVA_HOME%,確認它指向預期的JDK目錄。