---
# System prepended metadata

title: SDKMAN!｜套件管理工具
tags: [Tools]

---

# SDKMAN!｜套件管理工具
![image](https://hackmd.io/_uploads/HJ0h-X89T.png)

## 工具介紹

1. 版本管理： SDKMAN! 可以安裝、切換和卸載不同版本的軟體開發工具，例如 Java、Gradle、Maven、Scala、Kotlin 等。這使得開發者能夠方便地在不同項目中使用不同的版本，而不必手動下載和安裝。
2. 依賴性解決： SDKMAN! 能夠處理軟體開發工具之間的相互依賴性，確保安裝的版本是相容的。它能夠滿足項目對特定版本的需求。
3. 簡單的命令行界面： 使用者可以通過命令行輕鬆地執行 SDKMAN! 的命令，進行版本管理、列出可用的版本、安裝新版本等操作。
4. 輕量且易於安裝： SDKMAN! 本身是一個輕量的工具，易於安裝和配置。它是一個開源項目，可以在 GitHub 上找到其原始碼。

## SDKMAN! & NVM & Homebrew
![image](https://hackmd.io/_uploads/Hk0DG7Icp.png)
## 使用說明

### STEP1. 指令安裝SDKMAN!

#### 1-1. 打開Terminal執行指令。

```
$ curl -s "https://get.sdkman.io" | bash
```

![image](https://hackmd.io/_uploads/Bk1Afm8c6.png)

>上圖為執行安裝畫面。

#### 1-2. 執行指令讓SDKMAN!立即生效

* 指令會將SDKMAN!加到環境變數的設定檔內，如 **.zshrc** 或 **.bashrc 取決於當前的Terminal預設。**
* 指令前方可使用 source 或 exec 來讓當前的terminal來執行指定檔案。

```
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
```

**.zshrc**

* 此檔案是隱藏的，需到根目錄下使用「 ⇧shift + ⌘command + . 」就可以顯示。

```bash=
...
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
```

>**補充說明：**
<font style="color: orange">⚠️ </font>因為MacOS的環境變數檔有<font style="color: red">「.zshrc (預設會使用這個)」</font>、「bash_profile」、「.zprofile」三個，通常位於使用者根目錄底下，有時候利用指令設定一些環境變數時會自動同步到上述幾個檔案中(取決於你下的指令)，所以在使用這些套件管理工具來設定時，建議整理一下這些檔案內容，避免設定被覆蓋。
<font style="color: orange">⚠️ </font>設定檔內的環境設定參數是有優先順序的，相同的設定越下層的設定會優先、不同設定檔之間也有可能會互相影響。

#### 1.3. 驗證 SDKMAN! 已安裝

```
$ sdk version
```
![image](https://hackmd.io/_uploads/rJX4rmU96.png)

### STEP2. 嘗試使用 SDKMAN! 安裝 Java

#### 2-1. 查詢可以安裝的java版本

* 會自動偵測目前作業系統環境，最後顯示可以安裝的版本。

```
$ sdk list java
```
![image](https://hackmd.io/_uploads/ryoBr7I9T.png)

#### 2-2. 安裝指定Java版本

```
$ sdk install java [version]
```

>若沒有選擇版本會預設安裝最新版的java。

![image](https://hackmd.io/_uploads/BJS9BmIcT.png)

>若點擊tab兩下會顯示目前可以安裝的版本。

![image](https://hackmd.io/_uploads/BJt1IQI9a.png)

#### 2-3. 主動生效設定(非必須)

* 雖然sdkman有設定主動生效的參數，如果遇上更改版本後仍然未生效，可以執行該指令來生效設定檔。
* 如果Default的版本和當下要生效的版本不同，會造成回復成Default版本！所以記得先設定Default。

```
source ~/.zshrc
```

#### 2-4. 預設版本

* 若希望切換版本後可以在所有終端機生效，而不是當前的終端機而已，可以設定預設版本。
* 有些時候再啟動專案時，若沒有設定好開發環境，有可能會吃到Local的設定，也可以使用Default來指定預設版本。

```
sdk default java [已安裝的java版本]
```
![image](https://hackmd.io/_uploads/S1TfImL56.png)

#### 2-5. 驗證 Java 版本

```
java -version
```
![image](https://hackmd.io/_uploads/ryNNIXL5a.png)

## 補充說明

### 套件路徑確認

* 以此確認所安裝的套件是依賴正確的管理工具。

```
which [所要查看的套件名稱,ex: Java、Gradle、node]
```
![image](https://hackmd.io/_uploads/r1JvUX8qp.png)
