Linux 上で update-alternatives を活用した Java バージョン切り替えの標準手順

複数の Java Development Kit (JDK) を同一サーバー上にインストールし、状況に応じてバージョンを切り替える必要がある場合、手動でシンボリックリンクを張り替える方法は推奨されません。Debian 系 Linux ディストリビューションでは、update-alternatives コマンドを利用することで、システム標準の仕組みとしてバージョン管理を行うことができます。この手法を用いると、java コマンドと javac コマンドなどで異なるバージョンを割り当てるような柔軟な設定も可能です。

新規バージョンを登録する前に、現在設定されているバージョンの優先度(priority)を確認します。既存の設定よりも高い優先度を新規バージョンに設定することで、自動モードにおいて新しいバージョンが選択されるようにします。

現在の javac コマンドの状態を確認するには、以下のコマンドを実行します。

sudo update-alternatives --display javac

出力結果から、現在のリンク先と優先度を読み取ります。例えば、Java 8 が優先度 1000 で登録されている場合、新規に導入する Java 11 にはそれよりも高い値、例えば 2000 を設定します。

次に、新しい JDK をインストールします。Ubuntu のパッケージマネージャーを使用する場合は以下の通りです。

sudo apt-get install -y openjdk-11-jdk

インストールが完了すると、バイナリファイルは通常 /usr/lib/jvm/java-11-openjdk-amd64/bin/ 配下に配置されます。パッケージインストール時に自動的に登録されないコマンドについては、手動で update-alternatives に登録します。主要なコマンドを高い優先度で登録する手順は以下の通りです。

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 2000
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java-11-openjdk-amd64/bin/jar 2000

必要に応じて jshell や jmap などの他のツールも同様に登録可能です。登録後、再度 display コマンドを実行し、新しいバージョンが優先されて選択されていることを確認します。

sudo update-alternatives --display javac
java -version

出力に新しいバージョン番号が表示されれば設定は成功です。システムが自動的に最高優先度のバージョンを選ぶようにするには、各コマンドを auto モードに設定します。

sudo update-alternatives --auto java
sudo update-alternatives --auto javac
sudo update-alternatives --auto jar

これで優先度の高いバージョンが自動的に選択される状態になります。

タグ: linux Java update-alternatives OpenJDK Ubuntu

6月27日 17:42 投稿