iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Software Development

玩轉ABCL Lisp!用奇怪偏門的方式學習JavaFX系列 第 7

lesson -6: 多版本JAVA環境該如何切換?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260920/20112470DJ9gQfJoG7.png

TL;DR: 需要切換預設版本時,Linux可以使用update-java-alternatives,Windows可以調整JAVA_HOME;如果需要專案隔離時,可以考慮Conda或Docker。SDKMAN適合在Linux、macOS等Unix-like環境管理多個JDK,Windows則通常需要透過WSL使用。

程式開發隨著歷史的迭代,環境版本的管理也逐漸變得越發重要。首次注意到相關的工具是Node.JS的NVM,其更是已經進入了Node.JS官網推薦的安裝方式之一,此外還有fnmdockerBrew

甚至在最近的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。我也會透過dockerlxcconda來偶爾玩玩不同開發環境。

那麼要切換使用的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開發。這也是為什麼「環境準備可以很簡單」會是我的需求之一。環境準備可以很簡單,在逐步增加複雜設定與更方便使用,也是在對於整個生態有更清晰的理解。

下一步行動與檢查清單

先依照使用情境選擇切換方式:

  • 改變整台電腦的預設版本:Linux使用update-java-alternatives,Windows調整JAVA_HOME
  • 不同專案需要不同版本:優先使用IDE的專案設定,或使用Conda、SDKMAN等版本管理工具。
  • 需要完整隔離開發環境:使用Docker建立指定Java版本的環境。

切換完成後,重新開啟終端機並確認以下項目:

  • 執行java -version,確認目前的Java版本符合預期。
  • 如果使用JDK,再執行javac -version,確認編譯器版本也符合預期。
  • Linux或macOS執行which java;Windows執行where.exe java,確認實際使用的Java執行檔位置。
  • 如果有設定JAVA_HOME,Linux或macOS執行echo "$JAVA_HOME";Windows命令提示字元執行echo %JAVA_HOME%,確認它指向預期的JDK目錄。

上一篇
lesson -5: Linux怎麼準備JAVA開發環境?
系列文
玩轉ABCL Lisp!用奇怪偏門的方式學習JavaFX7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言