Why use SDKMan
自從 Oracle 改變了 JDK 相關的 licences 之後, JDK 的版本就進入了大亂鬥的時代, 大亂鬥就是有各式各樣的 Open JDK 版本, 像是…
- Zuzu JDK: https://www.azul.com/downloads/zulu-community
- Adopt JDK: https://adoptopenjdk.net/
- Amazon JDK: https://aws.amazon.com/tw/corretto/
- Liberica JDK: https://bell-sw.com/
而 SDKMan 就是一款協助管理因為大亂鬥時代而產生多種 SDKs 的管理工具. 管理的對象當然不止 JDK, 也包含 Kotlin, Maven, Groovy, JVM, Scala, Spark 的 SDKs 管理.
在現今的 Java 開發專案, 大多以 Java 11 (LTS 版本) 為主, 然而舊專案可能還停留在 Java8 或是更早的版本, 若要同時維護 Java8, Java 11專案, 時不時就要去改 JAVA_HOME 這個環境變. 透過 SDKMan 就能減輕這種切換的痛苦.
安裝
目前只支援 Unix-Like 的環境, Windows 的使用者目前尚未支援.
使用
用起來就很類似 Node.JS 的 NVM (Node version manager).
列出 Remote 可安裝的 JDKs
sdk list java
安裝想要的 JDK
找到心儀的 JDK 版本, 就安裝起來 ❤️
sdk install java 11.0.8.j9-adpt
JDK 切換
愛怎麼切, 就怎麼切…
sdk use java 8.0.265.j9-adpt
簡單確認環境
java -version
設定為預設 JDK
設定 default 並不會自動幫你切換, 他就只是預設, 預設的意思是打開新的 Terminal 如果沒有特別指定 JDK 版本, 就是你設定的那個 Default 版本.
sdk default java 11.0.8.j9-adpt
把目前環境的 JDK 與 IntelliJ 同步
IntelliJ 是目前主流的 Java 開發工具, 為了讓 Terminal 與 IntelliJ 的 JDK 版本一致, 可以透過 soft-link 做一些簡單的設定.
一般來說 Mac OS 安裝好的 JDKs 會在這個路徑
~/userName/.sdkman/candidates/{SDK}/{VERSION}
SDK: 指的是 Java, Scala, Kotlin, Groovy, Gradle … 這些 SDK.
VERSION: 指的是版本號, 像是 11.0.8.j9-adpt, 或是 8.0.265.j9-adpt
裡面有個 current, 他是一個 soft-link, 就是一個 Windows 系統所說的「捷徑」.
這邊會遇到一個問題是 .sdkman 是一個隱藏的目錄, 會導致 IntelliJ 搜尋不到這個資料夾, 所以一樣可以透過 soft-link 的方式, 建立一個 sdkman 的「捷徑」綁定到 .sdkman 這個目錄.
ln -s ~/.sdkman ~/sdkman
然後 IntelliJ 設定就能夠簡單的讀取到 sdkman 下載好的 SDKs.
# 透過 IntelliJ 去設定 SDKs
File -> project structure -> SDKs
你可以像考慮直接設定 current 那個 soft-link (跟 Terminal) 同步切換 JDK.
或是設定 ~/.sdkman/candidates/java/11.0.8.j9-adpt 直接指向對應的 JDK 路徑都可以, 看自己需求.