🗂

SDKMAN のインストールとアンインストール手順

2021/02/14に公開

検証環境の準備

Ubuntu の Docker コンテナで手順を検証する。
まず Ubuntu の Docker コンテナを作成してログインする。

docker run -it --rm ubuntu:latest bash

(以降、コンテナ内での作業)
SDKMAN のインストールと検証に必要なパッケージをインストールする。

apt-get update

# SDKMAN のインストールに必要なパッケージをインストール
apt-get install -y \
    unzip \
    zip \
    curl

# アンインストールの時に必要になるパッケージをインストール
apt-get install -y vim

これで検証環境が整う。

SDKMAN のインストール

SDKMAN のサイト ( https://sdkman.io/install ) に書いてある通りインストール。

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

# デフォルトでは $HOME/.sdkman にインストールされる
# インストール先を変更したい場合は、以下のように SDKMAN_DIR を設定した上でインストールする
# export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash

SDKMAN の初期化スクリプトを読み込むことで SDKMAN が有効になる。

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

# SDKMAN_DIR を設定した場合は以下のコマンド
# source "$SDKMAN_DIR/bin/sdkman-init.sh"

SDKMAN のバージョンが確認できるようになっていれば OK!

sdk version

SDKMAN の動作確認

動作確認として Java、Kotlin をインストールする。

# インストール可能な Java 一覧
sdk list java
# AdoptOpenJDK 15 をインストールする
sdk i java 15.0.2.j9-adpt
# Java のインストール確認
java -version
# 再ログインしたら JAVA_HOME が設定される
exec $SHELL -l
echo $JAVA_HOME

# インストール可能な Kotlin 一覧
sdk list kotlin
# Kotlin 1.4.30 をインストールする
sdk i kotlin 1.4.30
# Kotlin のインストール確認
kotlin -version

SDKMAN のアンインストール

SDKMAN 関連のパスを PATH から除去

echo $PATH すると、SDKMAN 関連のパスが通されていることが分かる。
(SDKMAN 関連のパスは $SDKMAN_DIR/candidates/<ライブラリ名>/current/bin の形式)

SDKMAN 関連のパスは明示的に除去しない限り残り続けるため、手動で PATH を更新する。
※ PATH を更新する前に元の値を控えておくと復元できる

# SDKMAN でインストールしたライブラリを把握する
sdk current

# インストールしたライブラリの数だけ sed -e "s,$SDKMAN_DIR/candidates/<ライブラリ名>/current/bin:,," でパスを除去する
# 今回のケースでは java と kotlin が対象
# sed のデリミタはスラッシュ以外でも OK
# スラッシュ以外の文字をデリミタにすればスラッシュをエスケープする必要がなくて楽
export PATH=$(echo $PATH | sed \
	-e "s,$SDKMAN_DIR/candidates/java/current/bin:,," \
	-e "s,$SDKMAN_DIR/candidates/kotlin/current/bin:,,"
)

sdkman-init.sh を呼び出さないようにする

~/.bashrc~/.zshrc から以下のような記述を除去する。

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

※ デフォルトシェルが bash または zsh でも 2ファイルとも記述を除去すること。
 インストールスクリプト を見ると、デフォルトシェルに関わらず 2ファイルとも初期化処理の記述を追加していることが分かる。

SDKMAN がインストールされているディレクトリを削除

SDKMAN が有効になっている環境では $SDKMAN_DIR が設定されているので、以下のコマンドで SDKMAN 関連のファイルを削除できる。

rm -rf $SDKMAN_DIR

環境変数を削除

# SDKMAN が設定した XXX_HOME 系の環境変数を表示する
export -p | grep -i _HOME
# Java と Kotlin をインストールした場合は JAVA_HOME と KOTLIN_HOME を削除
export -n JAVA_HOME
export -n KOTLIN_HOME

# SDKMAN 関連の環境変数を表示する
export -p | grep -i SDKMAN
# SDKMAN 関連の環境変数を削除する
export -n \
    SDKMAN_CANDIDATES_API \
    SDKMAN_CANDIDATES_DIR \
    SDKMAN_DIR SDKMAN_PLATFORM \
    SDKMAN_VERSION \
    binary_input \
    zip_output

アンインストール後の動作確認

# ログインし直す
exec $SHELL -l

# PATH に SDKMAN 関連のパスが含まれていないこと
echo $PATH
# JAVA_HOME が設定されていないこと
echo $JAVA_HOME
# SDKMAN 関連の環境変数が残っていないこと
export -p | grep -i SDKMAN
# 以下のコマンドが無効であること
sdk
java
kotlin
GitHubで編集を提案

Discussion