CLOVER🍀

That was when it all began.

Ubuntu Linux 24.04 LTSのaptパッケージでインストールしたOpenJDKをSDKMANで管理する

これは、なにをしたくて書いたもの?

自分は、Java系のツールのインストールにSDKMANを使っています。

Home | SDKMAN! the Software Development Kit Manager

ただOpenJDKはUbuntu Linuxのパッケージからインストールしていて、このバージョン切り替えを自前でやっていたのですがSDKMANで
やればいいのではということに気づきまして。

設定方法を確認しておきます。

環境

今回の環境はこちら。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.3 LTS
Release:        24.04
Codename:       noble


$ uname -srvmpio
Linux 6.8.0-85-generic #85-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 18 15:26:59 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

SDKMAN。

$ sdk version

SDKMAN!
script: 5.20.0
native: 0.7.14 (linux x86_64)

OpenJDKは8、11、17、21をインストール済みとします。

$ sudo apt search openjdk-.*-jdk$
ソート中... 完了
全文検索... 完了
openjdk-11-jdk/noble-updates,noble-security,now 11.0.28+6-1ubuntu1~24.04.1 amd64 [インストール済み]
  OpenJDK Development Kit (JDK)

openjdk-17-jdk/noble-updates,noble-security,now 17.0.16+8~us1-0ubuntu1~24.04.1 amd64 [インストール済み]
  OpenJDK Development Kit (JDK)

openjdk-21-jdk/noble-updates,noble-security,now 21.0.8+9~us1-0ubuntu1~24.04.1 amd64 [インストール済み]
  OpenJDK Development Kit (JDK)

openjdk-8-jdk/noble-updates,noble-security,now 8u462-ga~us1-0ubuntu2~24.04.2 amd64 [インストール済み]
  OpenJDK Development Kit (JDK)

自分のパッケージのインストール方針

このお題自体について、OpenJDKもSDKMANでインストールすればいいのでは?という疑問も浮かぶような気がしないでもないですが、
自分はOSへのパッケージインストールについては以下の方針にしています。

  • 可能な限りOSのパッケージでインストール
  • 利用したいバージョンがない、複数バージョンをインストールしたい場合などは専用にインストールしたりSDKMANのようなツールを利用

OpenJDKの場合、Ubuntu Linuxがバージョンごとにパッケージ分けしているのであまりSDKMANを使う理由がありません。バージョンアップも
aptに任せればいいですし。

ただ、バージョンの切り替えにはちょっと困ります。

update-alternativesで切り替えてもいいのですが、これだとコマンドひとつひとつに対して設定していくことになるのでちょっと厳しいです。

で、どうしているかというとOpenJDKのインストール先は以下のようになっているので、現在使いたいバージョンに対してシンボリックリンク
作成して、これを切り替えるといった運用をしていました。

$ ll /usr/lib/jvm
合計 52
drwxr-xr-x  9 root root 4096 10月  5 17:38 ./
drwxr-xr-x 81 root root 4096 10月  5 17:38 ../
-rw-r--r--  1 root root 2047  7月 18 05:44 .java-1.11.0-openjdk-amd64.jinfo
-rw-r--r--  1 root root 1773  7月 17 06:51 .java-1.17.0-openjdk-amd64.jinfo
-rw-r--r--  1 root root 1840  7月 17 06:55 .java-1.21.0-openjdk-amd64.jinfo
-rw-r--r--  1 root root 2613  7月 18 16:00 .java-1.8.0-openjdk-amd64.jinfo
lrwxrwxrwx  1 root root   21  7月 18 05:44 java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64/
lrwxrwxrwx  1 root root   21  7月 17 06:51 java-1.17.0-openjdk-amd64 -> java-17-openjdk-amd64/
lrwxrwxrwx  1 root root   21  7月 17 06:55 java-1.21.0-openjdk-amd64 -> java-21-openjdk-amd64/
lrwxrwxrwx  1 root root   20  7月 18 16:00 java-1.8.0-openjdk-amd64 -> java-8-openjdk-amd64/
drwxr-xr-x  9 root root 4096 10月  5 17:38 java-11-openjdk-amd64/
drwxr-xr-x  9 root root 4096 10月  5 17:38 java-17-openjdk-amd64/
drwxr-xr-x  9 root root 4096 10月  5 17:38 java-21-openjdk-amd64/
drwxr-xr-x  7 root root 4096 10月  5 17:38 java-8-openjdk-amd64/
drwxr-xr-x  2 root root 4096 10月  5 17:38 openjdk-11/
drwxr-xr-x  2 root root 4096 10月  5 17:38 openjdk-17/
drwxr-xr-x  2 root root 4096 10月  5 17:38 openjdk-21/

実はこれはこれで困っていません。

よって自分にとってのSDKMANはApache MavenおよびMaven Daemonを利用するためのツールになっていたりしています。

とはいえ、独自のやり方ではあるので、せっかくSDKMANを使っているのならこちらに合わせてもいいのではと思ったのが今回調べてみようと
思った動機ですね。

sdk install java path

今回のお題を解決するには、SDKMANの「Install Local Version(s)」を見ればOKです。

Usage / Installing an SDK/ Install Local Version(s)

指定のパスに対して、名前を付けられるんですよね。

自分の環境であればこうすればよさそうです。

$ sdk install java 8 /usr/lib/jvm/java-8-openjdk-amd64
Linking java 8 to /usr/lib/jvm/java-8-openjdk-amd64
Done installing!

vagrant@server:~$ sdk install java 11 /usr/lib/jvm/java-11-openjdk-amd64
Linking java 11 to /usr/lib/jvm/java-11-openjdk-amd64
Done installing!

vagrant@server:~$ sdk install java 17 /usr/lib/jvm/java-17-openjdk-amd64
Linking java 17 to /usr/lib/jvm/java-17-openjdk-amd64
Done installing!

vagrant@server:~$ sdk install java 21 /usr/lib/jvm/java-21-openjdk-amd64
Linking java 21 to /usr/lib/jvm/java-21-openjdk-amd64
Done installing!

こうなりました。

$ sdk list java | grep Unclassified -A 3
 Unclassified  |     | 21           | none    | local only | 21
               |     | 17           | none    | local only | 17
               |     | 11           | none    | local only | 11
               |     | 8            | none    | local only | 8

切り替えてみましょう。

$ sdk use java 8

確認。

$ javac -version
javac 1.8.0_462


$ java -version
openjdk version "1.8.0_462"
OpenJDK Runtime Environment (build 1.8.0_462-8u462-ga~us1-0ubuntu2~24.04.2-b08)
OpenJDK 64-Bit Server VM (build 25.462-b08, mixed mode)

Java 21。

$ sdk use java 21

確認。

$ javac --version
javac 21.0.8


$ java --version
openjdk 21.0.8 2025-07-15
OpenJDK Runtime Environment (build 21.0.8+9-Ubuntu-0ubuntu124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.8+9-Ubuntu-0ubuntu124.04.1, mixed mode, sharing)

よさそうですね。

デフォルトは現時点では21にしておきます。

$ sdk default java 21

こんなところでしょうか。