Linuxで複数のJavaバージョンを管理する:手動はやめてSDKMAN!を使おう!

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

「Javaバージョンの競合」という悩み

Javaデベロッパーなら、会社のレガシープロジェクトはJava 8、個人プロジェクトはJava 21、他のマイクロサービスはJava 17が必要といった皮肉な状況に直面したことがあるでしょう。従来のやり方は、.tar.gzファイルをダウンロードし、/usr/lib/jvm解凍して、手動でJAVA_HOMEを設定することでした。この方法は間違いではありませんが、非常に時間がかかります。

環境変数の更新を忘れるだけで、互換性のないバージョンでプロジェクトをビルドしてしまい、結果として一連のランタイムエラーが発生します。以前はUbuntuでupdate-alternativesコマンドを使っていましたが、構文が煩雑で、切り替えるたびにsudoを打つ必要があり、ワークフローが中断されていました。

SDKMAN! – 開発者の救世主

SDKMAN! (The Software Development Kit Manager) は、この混乱を解消してくれます。これは、SDKのインストールと切り替えを高速に行えるコマンドラインインターフェース(CLI)ツールです。Java (JDK) だけでなく、Maven、Gradle、Kotlinなど20以上のツールも管理できます。すべてユーザー層で動作するため、root権限は不要です。

最大のメリットは環境の分離能力です。バージョンの切り替えは、現在のターミナル内で即座に行われます。私が使用している4GB RAMのUbuntu VPSでは、新しいプロジェクトを開始するたびに設定時間を約15分短縮できています。システムのデフォルト設定を干渉したり壊したりすることもありません。

わずか数行のコマンドでSDKMAN!をインストール

まず、マシンにcurlunzipがインストールされていることを確認してください。これらはLinuxにおける最も基本的なツールです。インストールされていない場合は、以下のコマンドでインストールします:

sudo apt update
sudo apt install curl unzip zip -y

次に、SDKMAN!をサーバーから直接ダウンロードしてインストールします:

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

スクリプトの実行が終わったら、以下のコマンドを実行して環境を有効化する必要があります:

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

インストールが成功したか確認するには、sdk versionと入力します。特定のバージョンが表示されれば、JDKを管理する準備は完了です。

プロフェッショナルなJDK管理操作

1. 最適なJavaバージョンを探す

SDKMAN!は、Amazon Corretto、Microsoft、Temurinなど、多くのディストリビューターのJDKを提供しています。リストを表示するには、以下のコマンドを使用します:

sdk list java

リストが表示されます。Identifier列に注目してください。これは、必要なバージョンを正確にインストールするために使用する識別子です。

2. JDKを素早くインストールする

例えば、TemurinのJava 17(現在の本番環境で最も安定しているバージョン)が必要な場合は、次のように入力します:

sdk install java 17.0.10-tem

SDKMAN!が自動的に約200〜300MBのデータをダウンロードし、解凍してすべてを構成します。同様のコマンドで、古いプロジェクトのメンテナンス用にJava 8を追加インストールすることもできます。

3. 1秒でバージョンを切り替える

これが最も価値のある機能です。現在のターミナルだけでJava 17を使用したい場合は、sdk use java 17.0.10-temと入力します。逆に、PCを起動するたびに特定のバージョンをデフォルトにしたい場合は、sdk default java 17.0.10-temコマンドを使用します。java -versionで確認すると、即座に変更が反映されていることがわかります。

お役立ちヒント:.sdkmanrcファイルによる自動化

手動で切り替えコマンドを入力するのは、時にミスを招きます。幸いなことに、SDKMAN!は環境の自動認識機能をサポートしています。プロジェクトのルートディレクトリで、以下を実行してください:

sdk env init

このコマンドは.sdkmanrcファイルを生成します。そこに、java=17.0.10-temのように希望のJavaバージョンを記述するだけです。このディレクトリにcdで移動した際、sdk envと入力するだけで正しいバージョンに切り替わります。

完全に自動化したい場合は、~/.sdkman/etc/configにある設定ファイルを開き、sdkman_auto_env=trueに変更してください。これで、プロジェクトフォルダにアクセスするだけでSDKMAN!が自動的にJDKを切り替えてくれるようになります。

容量節約のために古いバージョンを削除する

各JDKは約500MBのディスク容量を占有します。不要になったら、削除してマシンを整理しましょう:

sdk uninstall java 8.0.392-tem

このコマンドは関連ファイルを完全に削除しますが、実行中の他のJavaバージョンには一切影響を与えません。

結びに

開発環境の管理が作業の進捗を妨げる壁になってはいけません。SDKMAN!は、Javaのインストールをnpmpipを使うのと同じくらいシンプルにしてくれます。実際の経験から、このツールを導入することで、デプロイ時のUnsupportedClassVersionErrorを完全に排除できました。ぜひ今日から導入して、ワークフローを最適化しましょう。

Share: