徒然

日常を垂れ流します。

SDKMAN! メモ

久々更新です。 新しいテーブルとイスとキーボードによりモチベが高まっています。

SDKMAN! is 何

公式サイトより引用

The Software Development Kit Manager

だそうです。うん、そっか。

初心者的に解釈すると、Javaの言語自体のバージョンを管理できるツールです。 Rubyのrbenvを参考にしているのだとか。Pythonでいうとpyenv、Node.jsでいうとnvm、、、 どの言語にも大体ありますね。

SDKMAN!はScala、Kotlin等のJVMを使う言語や、Maven、Spling Boot等の主要なライブラリのSDKも提供しています。

何故SDKMAN!を使うのか

最近はDocker等によりその必要性が薄くなってきている感もありますが、コマンド一発でマイナーアップデートが取得出来たり、バージョン変えられたりしたらやはり便利です。

JavaだとIDEIntelliJ IDEA)がその辺の面倒も見てくれるので今まで使用していなかったのですが、コマンドでちょちょいとJavaScala使うことも多くなってきたのでインストールする気になりました。

今の使い方の想定としては、Java,Scala等の言語についてはSDKMAN!で管理して、Maven等は今まで通りなんも考えずにIDEに一任しようと思ってます。

SDKMAN!導入

公式サイトの通りにコピペすれば簡単です。

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk version

SDKMAN!ができること

JDKJava Development Kit)のインストール

$ sdk install java #stableかつfomalなJavaがインストールできます。

$ sdk install java 19-tem #Temurinというコミュニティ版JDK。バージョンも指定します。

インストールできるJavai一覧

$sdk list java

$ sdk list scala #scalaなんかもこんな感じで

想像以上に色んなJDKがありますね。GraalVMでネイティブ化するのもたのしそう。。

使用するJDKを設定

$ sdk use 19-tem

普段使うJDKを設定(グローバル)

$ sdk default 19-tem

普段使うJDKを設定(フォルダごと)

$ cd ~/work/sdkman_test # ここで使うバージョンを設定する。
$ sdk env init # これで初期設定。`.sdkmanrc`というファイルができる。
$ cat .sdkmanrc
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=17.0.4.1-tem

$ sdk env # ただディレクトリに入るだけじゃダメで、このコマンドでバージョンが入れ替わる。

もしcdだけでバージョンを切り替えたいなら、$ sdk configでエディタが開くので、sdkman_auto_env=trueとする。

管理下のパッケージをアップグレード

$ sdk upgrade

SDKMAN!自体をアップデート

$ sdk selfupdate

なんか困ったとき

$ sdk update # なんかメタデータを更新してくれるらしい
$ sdk flush # キャッシュを削除してくれるらしい
$ sdk flush archives # 古いパッケージを削除してくれるらしい
$ sdk flush tmp # 古いSDKMAN!のインストーラを削除してくれるらしい

その他

$ sdk broadcast # なんか新機能とかのニュースが見れるらしい

IDEとの連携

 ~/.sdkman
$ tree -L 3
.
├── bin
│   └── sdkman-init.sh
├── candidates
│   └── java
│       ├── 17.0.4.1-tem
│       ├── 19-tem
│       └── current -> 19-tem

~/.sdkman/candidatesJDKの本体が収まっていました。これ使えばよさそうです。

まとめ

SDKMAN!は機能がシンプルで使いやすい印象です。 カジュアルにJavaを楽しめるようになったかなぁ。

参考文献

sdkman.io

qiita.com

dev.classmethod.jp