開発で結構頻繁にJavaのバージョンを切り替えるのに、
いつも忘れて毎回検索してしまうのでまとめておきます。
alternativesを使う方法
前提として以下のような感じでaptで複数のJDKがインストールされているとします。
※普通同時に複数バージョンをインストールしたりはしないでしょうが・・・
$ sudo apt install openjdk-11-jdk openjdk-17-jdk
切り替え
切り替える場合は以下のコマンドを実行します。
$ sudo update-alternatives --config java
するとこんなメニューが出てくるので
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode
* 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
Press <enter> to keep the current choice[*], or type selection number:
有効にしたいバージョンの数字を入れてenterでそのバージョンに変更されます。
sdkmanを使う方法
aptで入らないバージョンやJDKを使いたい場合などはsdkmanを使う方法もあります。
skdmanは https://sdkman.io/install ここを参考にインストールされているものとします。
インストールできるJDKの一覧
$ sdk list java
インストール
$ sdk install java 17.0.5-amzn
※Correttoの17.0.5を入れる場合。
一覧のIdentifierの値を第三引数に指定することで特定のJDKがインストールできます。
切り替え
$ sdk use java 8.0.352-amzn
現在選択されているバージョン表示
$ sdk current java
Using java version 8.0.352-amzn
デフォルトの指定
$ sdk default java 8.0.352-amzn
シェル起動時のデフォルトのバージョンを指定します。
方法別のメリットデメリット
まとめてみるとインストールの手間はあるもののsdkmanのほうが開発者向きな気がします。
alternatives
- メリット
- 特別なツールをインストールする必要がない
- デメリット
- システム全体の設定が変わってしまうため、コンソールごとに違うバージョンを使うことはできない。
sdkman
- メリット
- シェルごとに切り替えられるため、別バージョンを使い分けることが可能。
- いろいろなJDKが切り替えて使える。
- デメリット
- sdkman自体のインストールが必要。