Why use SDKMan

jerry80409
4 min readSep 10, 2020
https://sdkman.io/

自從 Oracle 改變了 JDK 相關的 licences 之後, JDK 的版本就進入了大亂鬥的時代, 大亂鬥就是有各式各樣的 Open JDK 版本, 像是…

SDKMan 就是一款協助管理因為大亂鬥時代而產生多種 SDKs 的管理工具. 管理的對象當然不止 JDK, 也包含 Kotlin, Maven, Groovy, JVM, Scala, Spark SDKs 管理.

在現今的 Java 開發專案, 大多以 Java 11 (LTS 版本) 為主, 然而舊專案可能還停留在 Java8 或是更早的版本, 若要同時維護 Java8, Java 11專案, 時不時就要去改 JAVA_HOME 這個環境變. 透過 SDKMan 就能減輕這種切換的痛苦.

安裝

https://sdkman.io/install

目前只支援 Unix-Like 的環境, Windows 的使用者目前尚未支援.

使用

用起來就很類似 Node.JS 的 NVM (Node version manager).

列出 Remote 可安裝的 JDKs

sdk list java
sdk list java

安裝想要的 JDK

找到心儀的 JDK 版本, 就安裝起來 ❤️

sdk install java 11.0.8.j9-adpt

JDK 切換

愛怎麼切, 就怎麼切…

sdk use java 8.0.265.j9-adpt

簡單確認環境

java -version
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

sdkman candidates path

裡面有個 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 路徑都可以, 看自己需求.

IntelliJ setting SDKs

--

--

jerry80409

隨便記錄一些沒有整理很清楚的想法