.sdkmanrc を使うと、direnv のようにディレクトリ移動時に SDKMAN でインストールした java, scala などのバージョンを切り替えることができる。
比較的最近追加されたので、利用するには SDKMAN を最新(執筆時点では 5.8.3)にアップデートしておく。
.sdkmanrc を生成
バージョンを指定したいディレクトリで sdk env init
を実行する。
$ cd sdkenv-test/
$ sdk env init
.sdkmanrc created.
.sdkmanrc が生成され、次のようになっている。
$ cat .sdkmanrc
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=8.0.202.j9-adpt
設定
生成された .sdkmanrc に使用したいバージョンを指定する。
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=13.0.2.j9-adpt
~/.sdkman/etc/config で sdkman_auto_env=true
に設定する。
sdkman_auto_env=true
とすることで direnv のようにディレクトリに移動したときに自動的に切り替わる。
シェルをリスタートする。
$ exec $SHELL -l
実行例
$ cd sdkenv-test/
Using java version 13.0.2.j9-adpt in this shell.
sdkman_auto_env=false の場合は手動で切り替える必要がある
sdkman_auto_env=false
に設定されていると、.sdkmanrc のあるディレクトリに移動しても自動では切り替わらない。
sdk env
を実行して切り替えないといけない。
$ cd sdkenv-test/
$ java --version
openjdk 14.0.1 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.1+7)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.20.0, JRE 14 Linux amd64-64-Bit Compressed References 20200416_44 (JIT enabled, AOT enabled)
OpenJ9 - 05fa2d361
OMR - d4365f371
JCL - 5757187cae based on jdk-14.0.1+7)
$ sdk env
Using java version 13.0.2.j9-adpt in this shell.