これは、なにをしたくて書いたもの?
自分は、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
こんなところでしょうか。