SDKMANで、Java JDK をバージョン管理する
皆さん、こんにちは。技術開発グループの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環境の構築にも役立ちそうです。
ではまた。