SDKMANで、Java JDK をバージョン管理する

n-ozawan

皆さん、こんにちは。技術開発グループのn-ozawanです。
7月30日は夏の土用の丑の日です。今年は土用の丑の日は6回あります。

本題です。
みなさん、Javaで開発する際、どこのJDKを利用していますか?多くの場合、Oracle社が提供しているJDKを利用されているかと思いますが、Oracle社以外から提供されているJDK (OpenJDK、Temurin、Correttoなど) も増えてきた印象があります。今日はそれらのバージョン管理が出来るSDKMANというツールを紹介します。

SDKMAN

これまでOracle社が提供しているJDKでJava開発をすることが多かったのですが、2018年にOracle JDK のLTS (長期商用サポート) の商用利用に限り有償化する※という発表を契機に、Oracle以外から提供されているJDK ディストリビューションが注目されるようになりました。
※2021年のOracle JDK 17 (LTS) から無料化しました。

これにより、「Javaのバージョンはいくつで開発する?」という話題から、「どのJDKで開発する?」という話題まで広がるようになり、いくつもの案件を掛け持ちするJava開発者はJDKのバージョン管理を行う必要性に迫られることになったかと思います。

今日紹介するSDKMANはJava JDKのバージョンを管理することが出来るツールです。「バージョン管理」と言っていますが、厳密にはソフトウェア開発に必要なツールキットのパッケージマネージャーです。GroovyやKotlinなどのJVM上で動作するプログラム言語や、MavenやGradleなどのビルド環境、その他開発で利用するツールキットをSDKMANでインストール&管理することが出来ます。

SDKMANで何が管理できるのかは公式サイトを参照してください。管理可能なJDKはこちらを参照してください。

インストール手順

SDKMANはmacOS、Linux、WSL、Cygwin、Solaris、FreeBSDに対応しています。残念なことにWindowsには未対応ですが、WSLに対応しています。

WSL環境で以下のコマンドを実行して、シェルを再起動すると使えるようになります。

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

SDKMANが使えるかどうかは以下のコマンドで確認してみましょう。

$ sdk version

チートシート

Java JDK をインストールする

$ sdk install java                 # (2023-07-25時点) TemurinのLTS(17.0.8) をインストールする
$ sdk install java 17.0.8-oracle   # Oracle Java JDK 17.0.8 をインストールする

Java JDK をアンインストールする

$ sdk uninstall java 17.0.8-oracle

使用中の Java JDK を確認する

$ sdk current           # 使用中のすべてのツールキットのバージョンを確認する
$ sdk current java      # 使用中の Java JDK を確認する

使用する Java JDK を指定する

$ sdk use java 17.0.8-oracle

sdk useは現在開いているシェルのみ有効です。常にそのJDKを使用したい場合はsdk defaultで指定します。

常に使用するJava JDKを指定する

$ sdk default java 17.0.8-oracle

インストール可能なJava JDK を確認する

$ sdk list java

そのプロジェクトで使用するバージョンを指定しておく

プロジェクトルートに.sdkmanrcファイルを配置して、プロジェクトで利用する開発ツールのバージョンを記述することで、環境の切り替えを容易に行えることが出来ます。Java開発ではJava JDKだけでなく、MavenやGradleなどのビルド環境などもインストールする必要があります。.sdkmanrcファイルがあれば、1回のコマンド操作で必要なツールがすべてインストール出来るので便利です。

$ sdk env init         # .sdkmanrc を作成する
$ sdk env install      # .sdkmanrc に記述されているツールキットをすべてインストールする
$ sdk env              # .sdkmanrc に記述されているツールキットに切り替える

おわりに

JDKだけでなく、MavenやGradleなどのビルド環境の他、Java開発に関係するツール類を纏めてインストール出来るのは便利ですね。単にバージョン管理だけでなく、CI環境の構築にも役立ちそうです。

ではまた。

Recommendおすすめブログ