Ubuntuに最新のOpenJDK(Java)をインストールする方法

  • URLをコピーしました!
使用した環境はUbuntu 22.04 LTS ARM64のParallels仮想環境
使用した環境はUbuntu 22.04 LTS ARM64のParallels仮想環境

この記事では、Ubuntuのパッケージマネージャー"apt"を使って、最新のOpenJDKをダウンロードしていきます。

OpenJDK(Java)を入れるシーンは多いです。

例えば、マインクラフトでOpenJDK(Java)を必ず使います。

マインクラフトと言えば、世界で一番売れたゲームとしてギネス登録されてるくらいです。

なので、OpenJDK(Java)を使う人は恐ろしく多いわけです。

しかし、最新のOpenJDK(Java)を調べてダウンロードするのは面倒です。

こういう場合、Linuxのパッケージ管理システムを使えば、コマンド一発でOS環境に最適なソフトをインストールできます。

今回はUbuntu 22.04 LTS ARM64 環境のパッケージマネージャー "apt"を使って、コマンド一発で最新のOpenJDKをインストールします。

目次

OpenJDK とは?

OpenJDK≒Javaの理解で構いません。ただ、細く知りたい方のためにOpenJDKを解説すると、、、。

OpenJDKは、Open-source Java Development Kitの略で、Java(SE)の言語仕様に基づいて実装される企業横断のオープンソースプロジェクトです。

OpenJDK

  • Javaを開発するキット(JDK)
  • Javaを実行する環境(JRE)
  • JREに必要なJava仮想マシン(JVM)、プログラム(API)

上記一式をOpenJDKと呼んでいます。つまり、Javaを使う人、Javaで開発する人(開発者)ともに"OpenJDK"を入れておけば良いということです。

Javaを詳しく知っていなくても"OpenJDK"を入れておけば良いわけです。当然、マインクラフトのサーバー環境を手早く入手したい方にも"OpenJDK"で十分なわけです。

一つややこしいのは、OpenJDKには、Microsoft社のOpenJDK、オラクル社のOracleJDKなど各社のビルドバージョンのJDKがあります。

各OSのOpenJDK

  • Windows
    • winget:Microsoft OpenJDK(MicrosoftビルドのOpenJDK)
       
  • Ubuntu
    • apt:OpenJDK≠Microsoft OpenJDK
       
  • M1・M2 Mac
    • Homebrew:OpenJDK≠Microsoft OpenJDK

ただ、マイクラを実行する上ではどのJDKを使おうが関係ありません。そのOSのパッケージ管理システム(Microsoftならwingetなど)で表示されるOpenJDKを使えば良いだけです。

厳密にはOpenJDK≠Microsoft OpenJDKですが、パッケージマネージャーに従うだけで違いを気にする必要が無いということです。

Javaについてもっと詳しく知りたいという方は、下の記事がオススメです。

作成中

Java、JRE、JDK、OpenJDK、OracleJDKの違いを解説

Ubuntu にOpenJDK(Javaランタイム環境)をインストール

Parallels®︎ Desktop 18 for Macで起動した「Ubuntu 22.04 LTS ARM64」
使用した環境はUbuntu 22.04 LTS ARM64のParallels仮想環境

OpenJDKはsudo apt install openjdk-(バージョン番号)-jreでインストールできます。

ただ、最新バージョンが分からないのは常です。

本記事のOpenJDKインストールの流れ

  • ① Ubuntuシステム更新
  • ② OpenJDKパッケージを確認
  • ③ OpenJDKインストール
  • ④ 確認

回りくどいかもしれませんが、OpenJDKの最新パッケージの確認のやり方を解説します。

それから最新のOpenJDKをインストールしてみます。

① 先ず、Ubuntu パッケージ管理システム(apt)を更新

$ sudo apt update && sudo apt upgrade

Ubuntuインストール直後なら必ずパッケージ管理システム(apt)を更新しておきましょう。

apt list -a openjdk*でパッケージを確認する

$ apt list -a openjdk*
一覧表示... 完了
openjdk-11-dbg/jammy-updates,jammy-security 11.0.16+8-0ubuntu1~22.04 arm64
openjdk-11-dbg/jammy 11.0.14.1+1-0ubuntu1 arm64

:
:
:

openjdk-17-dbg/jammy-updates,jammy-security 17.0.4+8-1~22.04 arm64
openjdk-17-dbg/jammy 17.0.2+8-1 arm64

openjdk-17-demo/jammy-updates,jammy-security 17.0.4+8-1~22.04 arm64
openjdk-17-demo/jammy 17.0.2+8-1 arm64

openjdk-17-doc/jammy-updates,jammy-security 17.0.4+8-1~22.04 all
openjdk-17-doc/jammy 17.0.2+8-1 all

:
:
:

openjdk-18-jdk-headless/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jdk-headless/jammy 18~36ea-1 arm64

openjdk-18-jdk/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jdk/jammy 18~36ea-1 arm64

openjdk-18-jre-headless/jammy-updates,jammy-security,now 18.0.2+9-2~22.04 arm64 [インストール済み、自動]
openjdk-18-jre-headless/jammy 18~36ea-1 arm64

openjdk-18-jre-zero/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jre-zero/jammy 18~36ea-1 arm64

openjdk-18-jre/jammy-updates,jammy-security,now 18.0.2+9-2~22.04 arm64 [インストール済み]
openjdk-18-jre/jammy 18~36ea-1 arm64

openjdk-18-source/jammy-updates,jammy-security 18.0.2+9-2~22.04 all
openjdk-18-source/jammy 18~36ea-1 all

openjdk-8-dbg/jammy-updates,jammy-security 8u342-b07-0ubuntu1~22.04 arm64
openjdk-8-dbg/jammy 8u312-b07-0ubuntu1 arm64

:
:
:

openjdk-8-source/jammy-updates,jammy-security 8u342-b07-0ubuntu1~22.04 all
openjdk-8-source/jammy 8u312-b07-0ubuntu1 all

$ 

apt listコマンドであらかじめパッケージのバージョンを確認できます。

ざっと見るとOpenJDK 18が最新っぽいです。

項目が多ければglepコマンドで抽出してみるのも良いでしょう。

$ sudo apt-cache search openjdk | grep openjdk-18
openjdk-18-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-18-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-18-doc - OpenJDK Development Kit (JDK) documentation
openjdk-18-jdk - OpenJDK Development Kit (JDK)
openjdk-18-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-18-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-18-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-18-jre-zero - Alternative JVM for OpenJDK, using Zero
openjdk-18-source - OpenJDK Development Kit (JDK) source files

$ 

apt searchコマンドではなくapt-cache searchコマンドを使いました。

下記で理由を説明していますが、この辺りは慣れです。

aptとapt-get(apt-cache)の違い

aptapt-getapt-cacheとの違いは下記です。

  • aptapt-getapt-cacheが統合した新しいパッケージ管理コマンド
  • aptはプログレスバーがついて進捗がわかりやすい
  • upgradeのときaptよりapt-getの方が条件が厳しい(慎重)

違いを意識する必要はありませんが、古いapt-getapt-cacheよりも新しいaptを使った方が良いかも知れません。

しかしaptコマンドでパイプを利用すると、以下のWARNING: apt does not have a stable CLI interface. Use with caution in scripts.という警告が出ます。

$ sudo apt search openjdk | grep openjdk-18

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

openjdk-18-dbg/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-demo/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-doc/jammy-updates,jammy-security 18.0.2+9-2~22.04 all
openjdk-18-jdk/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jdk-headless/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jre/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jre-headless/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-jre-zero/jammy-updates,jammy-security 18.0.2+9-2~22.04 arm64
openjdk-18-source/jammy-updates,jammy-security 18.0.2+9-2~22.04 all

$ 

パイプ(|)で繋ぐスクリプト処理では、apt-getapt-cacheを使う方が良いみたいです。

これはaptmanページにも書いてます。

SCRIPT USAGE AND DIFFERENCES FROM OTHER APT TOOLS
       The apt(8) commandline is designed as an end-user tool and it may change behavior between versions. While it tries not to break backward compatibility this is not guaranteed either if a change seems
       beneficial for interactive use.

       All features of apt(8) are available in dedicated APT tools like apt-get(8) and apt-cache(8) as well.  apt(8) just changes the default value of some options (see apt.conf(5) and specifically the
       Binary scope). So you should prefer using these commands (potentially with some additional options enabled) in your scripts as they keep backward compatibility as much as possible.

aptが良いのか、apt-getapt-cacheが良いのか?

なんだかモヤモヤした気分になります。

③ OpenJDK 18 をインストール(sudo apt install openjdk-18-jre

$ sudo apt install openjdk-18-jre
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
  ca-certificates-java fonts-dejavu-extra java-common libatk-wrapper-java
  libatk-wrapper-java-jni openjdk-18-jre-headless
提案パッケージ:
  default-jre fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei
  | fonts-wqy-zenhei
以下のパッケージが新たにインストールされます:
  ca-certificates-java fonts-dejavu-extra java-common libatk-wrapper-java
  libatk-wrapper-java-jni openjdk-18-jre openjdk-18-jre-headless
アップグレード: 0 個、新規インストール: 7 個、 削除: 0 個、保留: 0 個。
49.4 MB のアーカイブを取得する必要があります。
この操作後に追加で 197 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://ports.ubuntu.com/ubuntu-ports jammy/main arm64 java-common all 0.72build2 [6,782 B]
取得:2 http://ports.ubuntu.com/ubuntu-ports jammy-updates/universe arm64 openjdk-18-jre-headless arm64 18.0.2+9-2~22.04 [47.0 MB]

:
:
:

Adding debian:Actalis_Authentication_Root_CA.pem
Adding debian:XRamp_Global_CA_Root.pem
Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem
Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem
Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem
Adding debian:NAVER_Global_Root_Certification_Authority.pem
Adding debian:TWCA_Root_Certification_Authority.pem
Adding debian:UCA_Extended_Validation_Root.pem
Adding debian:T-TeleSec_GlobalRoot_Class_2.pem
Adding debian:Security_Communication_RootCA2.pem
done.
openjdk-18-jre:arm64 (18.0.2+9-2~22.04) を設定しています ...
fontconfig (2.13.1-4.2ubuntu5) のトリガを処理しています ...
desktop-file-utils (0.26-1ubuntu3) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
gnome-menus (3.36.0-1ubuntu3) のトリガを処理しています ...
man-db (2.10.2-1) のトリガを処理しています ...
ca-certificates (20211016) のトリガを処理しています ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
mailcap (3.70+nmu1ubuntu1) のトリガを処理しています ...

$ 

④ OpenJDK 18 のパスが通ってるかを確認する(java -version

$ java -version 
openjdk 18.0.2-ea 2022-07-19
OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-222.04, mixed mode, sharing)

$ 

Javaのパスが通っているか確認のために、試しにjava -versionを打ってみます。

openjdk 18.0.2-eaが入っており、無事にJavaのパスが通ってると分かります。

OpenJDKをアンインストール(削除)する(apt purge --auto-remove

OpenJDKパッケージを削除してみましょう。

パッケージの削除はapt purge --auto-removeをしておけば良いでしょう。

aptでのパッケージ削除コマンド

  • apt remove:設定ファイルを残してパッケージを削除
  • apt purge:設定ファイルもパッケージも削除
    • apt removeに追加オプションでapt-get remove --purgeでも利用できる
  • apt autoremove:すでに依存関係もなく使われないパッケージを一括で削除
    • autoremoveもオプションで利用できる。
    • 例:apt purge --auto-remove openjdk*

apt purge --auto-removeなら依存関係上で不要になったパッケージもすべて削除されます。

根こそぎ削除するなら--auto-removeを付けて削除すれば良いと覚えておきましょう。

apt remove、apt purge の違い

apt removeは設定ファイルを削除しません。そのため、再インストール(apt install)すると、前の設定を引き継いで再インストールできます。apt purgeは設定ファイルも全て削除します。なので、再インストールすると、設定もやり直しになります。

例:apt purge --auto-remove openjdk*

arallels@ubuntu-linux-22-04-desktop:~$ sudo apt purge --auto-remove openjdk*
[sudo] parallels のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
注意、glob 'openjdk*' のために 'openjdk-11-jdk' を選択します
注意、glob 'openjdk*' のために 'openjdk-11-jre' を選択します
注意、glob 'openjdk*' のために 'openjdk-11-jre-headless' を選択します
:
:
:
注意、glob 'openjdk*' のために 'openjdk-13-jre-headless' を選択します
注意、glob 'openjdk*' のために 'openjdk-17-jre-headless' を選択します
注意、glob 'openjdk*' のために 'openjdk-18-source' を選択します
注意、glob 'openjdk*' のために 'openjdk-11-dbg' を選択します
注意、glob 'openjdk*' のために 'openjdk-11-doc' を選択します
注意、glob 'openjdk*' のために 'openjdk-12-jre-headless' を選択します
パッケージ 'openjdk-6-jre-headless' はインストールされていないため削除もされません
パッケージ 'openjdk-14-jre-headless' はインストールされていないため削除もされません
:
:
:
パッケージ 'openjdk-18-jre-headless' はインストールされていないため削除もされません
パッケージ 'openjdk-18-jre-zero' はインストールされていないため削除もされません
パッケージ 'openjdk-18-source' はインストールされていないため削除もされません
パッケージ 'openjdk-8-dbg' はインストールされていないため削除もされません
パッケージ 'openjdk-8-demo' はインストールされていないため削除もされません
パッケージ 'openjdk-8-doc' はインストールされていないため削除もされません
パッケージ 'openjdk-8-jdk' はインストールされていないため削除もされません
パッケージ 'openjdk-8-jdk-headless' はインストールされていないため削除もされません
パッケージ 'openjdk-8-jre' はインストールされていないため削除もされません
パッケージ 'openjdk-8-jre-headless' はインストールされていないため削除もされません
パッケージ 'openjdk-8-jre-zero' はインストールされていないため削除もされません
パッケージ 'openjdk-8-source' はインストールされていないため削除もされません
以下のパッケージは「削除」されます:
  ca-certificates-java* default-jre* default-jre-headless* fonts-dejavu-extra*
  java-common* libatk-wrapper-java* libatk-wrapper-java-jni* openjdk-11-jre*
  openjdk-11-jre-headless*
アップグレード: 0 個、新規インストール: 0 個、 削除: 9 個、保留: 0 個。
この操作後に 177 MB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 219493 個のファイルとディレクトリがイン
ストールされています。)
default-jre (2:1.11-72build2) を削除しています ...
openjdk-11-jre:arm64 (11.0.16+8-0ubuntu1~22.04) を削除しています ...
default-jre-headless (2:1.11-72build2) を削除しています ...
fonts-dejavu-extra (2.37-2build1) を削除しています ...
libatk-wrapper-java-jni:arm64 (0.38.0-5build1) を削除しています ...
libatk-wrapper-java (0.38.0-5build1) を削除しています ...
openjdk-11-jre-headless:arm64 (11.0.16+8-0ubuntu1~22.04) を削除しています ...
java-common (0.72build2) を削除しています ...
ca-certificates-java (20190909) を削除しています ...
desktop-file-utils (0.26-1ubuntu3) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
gnome-menus (3.36.0-1ubuntu3) のトリガを処理しています ...
man-db (2.10.2-1) のトリガを処理しています ...
ca-certificates (20211016) のトリガを処理しています ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

updates of cacerts keystore disabled.
done.
mailcap (3.70+nmu1ubuntu1) のトリガを処理しています ...
fontconfig (2.13.1-4.2ubuntu5) のトリガを処理しています ...
(データベースを読み込んでいます ... 現在 219124 個のファイルとディレクトリがイン
ストールされています。)
java-common (0.72build2) の設定ファイルを削除しています ...
openjdk-11-jre-headless:arm64 (11.0.16+8-0ubuntu1~22.04) の設定ファイルを削除し
ています ...
ca-certificates-java (20190909) の設定ファイルを削除しています ...

$ java --version
bash: /usr/bin/java: そのようなファイルやディレクトリはありません

コメント

コメントする

目次