UbuntuでaptでインストールできるJDK3種のセットアップ(Ubuntu標準/Eclipse Adoptium(AdoptOpenJDK)/Microsoft Build of OpenJDK/Liberica JDK)

Posted by 雅楽斎 on Sunday, April 11, 2021

TOC

MicrosoftがOpenJDKをビルドして提供することを発表

Microsoft Build of OpenJDK

GitHub - microsoft/openjdk: Microsoft Build of OpenJDK

Microsoft Build of OpenJDK. Contribute to microsoft/openjdk development by creating an account on GitHub.

これまでMicrosoftのクラウドサービスであるAzure上でJavaを使用する際にはAzul Systemsの提供するJDKをサポートするとしていました。

しかし、2021年4月6日、MicrosoftはOpenJDKのLTSディストリビューションとして「Microsoft Build of OpenJDK」を発表しました。現在はJava11のJDKがプレビューリリースとして公開されています。

かつてJavaとVisual J++を巡ってSunとMicrosoftが訴訟をしていたことからも今回の動きは大きな転換点かと考えています。Microsoft Build of OpenJDKはDebian系のディストロの場合はaptで導入できるため、現時点でaptで導入できるJDK4種類を比較して導入する方法を纏めます。

JavaのバージョンとLTS

プログラミング言語としてのJavaは、Java8をLTSとしてリリースして以降は毎年3月と9月に新バージョンをリリースし、以降のリリースでは11(2018年9月)、17(2021年9月予定)を5年間メンテナンスするLTSと定義しています。

開発する側として意識するバージョンはLTSの8、11とその時点での最新版(執筆時点での16)、ユーザー視点では意識するのはLTSの8と11(と17)のみで問題ないと思います。

Ubuntu標準のJDK、Eclipse Adoptium、Microsoft Build of OpenJDK、Liberica JDKの特徴

JDKの名称提供バージョン
Ubuntu標準のJDK8/11/13/14
(20.04)
Eclipse Adoptium8/11/14/15/16
Microsoft Build of OpenJDK11
Liberica JDK8/11/12/13/14/15/16

Ubuntu標準のJDKの特徴

  • ディストロのリリース後サポート期間内のものがサポートされているように見える(17リリース後のサポートが不明)
  • 追加リポジトリの設定なくインストール、アップデートできるため、ユーザー視点では一番手間が少ない
  • パッケージとしてJDK/JRE、headlessを分けて提供しているため、例えばコンパイラが必要ないGUIのない環境ではheadlessのJREをインストールするとディスクサイズを節約できる

Eclipse Adoptiumの特徴

  • AdoptOpenJDKという名称だったが、現在はEclipse財団に移管されてEclipse Adoptiumという名称になっている
  • ベンダーニュートラルを目指し、Alibaba Cloud / Huawei / IBM / iJUG / Karakun AG / Microsoft / New Relic / Red Hatが出資して設立された
  • VMの種類として、HotSpotの他に組み込み向けとして提供されていたJ9ベースのOpenJ9も提供している
  • OpenJ9のVMについてはヒープを57GB以上使用する場合のOpenJ9 XL Heapも提供されています(パッケージ名はadoptopenjdk-11-openj9xl等) OpenJ9 XL Heap – Eclipse OpenJ9 Blog

Microsoft Build of OpenJDKの特徴

  • LTSのみリリース予定

Liberica JDKの特徴

  • Bellsoftが提供するJDKで、言語サポートされているJavaのバージョンをリリースしている
  • Java11で標準機能として提供されなくなったデスクトップ環境JavaFXをバンドルしたLiberica Full JDKをリリースしている
  • Ubuntu標準のJDKと同様、JRE、headlessが提供されている

各種JDK(Java11)のインストール方法

Ubuntu標準のJDK

# apt-get install openjdk-11-jdk
$ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

Eclipse Adoptium

Installation | AdoptOpenJDK - Open source, prebuilt OpenJDK binaries

現時点ではインストール方法はまだEclipse Adoptiumのサイトに移動していないので、AdoptOpenJDKのサイトを参照します。

リポジトリの追加

# apt-get install wget apt-transport-https gnupg
# wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add -
# echo "deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb focal main" | tee /etc/apt/sources.list.d/adoptopenjdk.list
# apt-get update

JDK(HotSpot)のインストール

# apt-get install adoptopenjdk-11-hotspot
$ /usr/lib/jvm/adoptopenjdk-11-hotspot-amd64/bin/java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

JDK(OpenJ9)のインストール

# apt-get install adoptopenjdk-11-openj9
$ /usr/lib/jvm/adoptopenjdk-11-openj9-amd64/bin/java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.24.0, JRE 11 Linux amd64-64-Bit Compressed References 20210120_910 (JIT enabled, AOT enabled)
OpenJ9   - 345e1b09e
OMR      - 741e94ea8
JCL      - 0a86953833 based on jdk-11.0.10+9)

Microsoft Build of OpenJDK

Microsoft Build of OpenJDK

リポジトリの追加

# wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
# dpkg -i packages-microsoft-prod.deb
# apt install apt-transport-https
# apt update

JDKのインストール

# apt install msopenjdk-11 
$ /usr/lib/jvm/msopenjdk-11-amd64/bin/java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment Microsoft-18724 (build 11.0.10+9)
OpenJDK 64-Bit Server VM Microsoft-18724 (build 11.0.10+9, mixed mode)

Liberica JDK

Liberica JDK 11.0.10+9 Install Guide | BellSoft - Java Platform & Applications Experts

リポジトリの追加

# wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | apt-key add -
# echo "deb [arch=amd64] http://apt.bell-sw.com/ stable main" | tee /etc/apt/sources.list.d/bellsoft.list
# apt-get update

JDKのインストール

# apt-get install bellsoft-java11
$ /usr/lib/jvm/bellsoft-java11-amd64/bin/java -version
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM (build 11.0.10+9-LTS, mixed mode)

JDK(Full)のインストール

# apt-get install bellsoft-java11-full 
$ /usr/lib/jvm/bellsoft-java11-full-amd64/bin/java -version
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM (build 11.0.10+9-LTS, mixed mode)

VM自体はJavaFX同梱のFullとStandardで全く同じなので、JavaFXを使う場合はFull、予定がない場合は無印をインストールすれば問題ないと思います。

使用するJavaの切替

Ubuntu(やDebian)では、複数の実装が存在するソフトウェア(JavaやPython、Ruby、Webブラウザ等)はupdate-alternativesコマンドで使用する実装を切り替えることができます。

Java関連のコマンドで切替の対象になっているのはjava javacに始まり非常に多いのですが、ターミナルから直接打つこれらのコマンドの参照先を切り替えることで複数インストールされているJavaの実装やバージョンを切り替えることができます。

# update-alternatives --config java
alternative java (/usr/bin/java を提供) には 7 個の選択肢があります。

  選択肢    パス                                                優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/bellsoft-java11-full-amd64/bin/java       21100103  自動モード
  1            /usr/lib/jvm/adoptopenjdk-11-hotspot-amd64/bin/java    1111      手動モード
  2            /usr/lib/jvm/adoptopenjdk-11-openj9-amd64/bin/java     1111      手動モード
  3            /usr/lib/jvm/adoptopenjdk-11-openj9xl-amd64/bin/java   1111      手動モード
  4            /usr/lib/jvm/bellsoft-java11-amd64/bin/java            21100102  手動モード
  5            /usr/lib/jvm/bellsoft-java11-full-amd64/bin/java       21100103  手動モード
  6            /usr/lib/jvm/java-11-openjdk-amd64/bin/java            1111      手動モード
  7            /usr/lib/jvm/msopenjdk-11-amd64/bin/java               1111      手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 2
update-alternatives: /usr/bin/java (java) を提供するためにマニュアルモードで /usr/lib/jvm/adoptopenjdk-11-openj9-amd64/bin/java を使います

LibericaのJDKの優先度が極端に大きくなっているので、インストールする場合は気を付けた方が良いと思います。

スポンサーリンク


comments powered by Disqus