Javaをインストール

# はじめに

開発用のOS（Lubuntu）を仮想マシンにインストールできたので、次はJavaをインストールします。
インストール自体は数行で終わってしまいそうなので、現在主流のJavaについて調べてみます。

私がかつて知っているものは、[Sun Microsystems](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%B3%E3%83%BB%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA)のJavaと[IBM J9](https://ja.wikipedia.org/wiki/IBM_J9)です。

備忘録

- [VirtualBoxをインストール](https://qiita.com/marbas666/items/e1cca16fb667e165bd5c)
- Lubuntuをインストール
    - [VirtualBoxに仮想マシンの作成](https://qiita.com/marbas666/items/52b3e7ec0b24de0f1bff)
    - [仮想マシンにLubuntuをインストール](https://qiita.com/marbas666/items/fa44ce8323bf176dda2d)
    - [Lubuntuの設定](https://qiita.com/marbas666/items/35f8a5e39b29269a0450)
- Javaをインストール ←この記事はこれ
- VSCodeをインストール
- Springでアプリをつくる

# JREとJDK

既知とは思いますが、一応書いておきます。

JRE：Java Runtime Environment
JDK：Java Development Kit

大きな違いは、JREはJavaを実行する為のもの、JDKはJavaの開発を行う為のものです。
乱暴な言い方をすると、JDKにはコンパイラーが含まれています。

これから、JavaのプログラミングをしてみるのでJDKをインストールします。

# バージョン

現在（2021年02月）、最新バージョンは **15** です。
しかし、開発で使うバージョンは **11** の方が多いようです。
これは、LTS（long-term support / 長期サポート）だからだそうです。

JavaのLTSは、バージョン **8** と **11** がそれに該当しています。
2021年09月には、バージョン **17** がLTSとして発表されるみたいです。
夏からは **17** が主流になるのかもしれません。 

「[Java - Wikipedia](https://ja.wikipedia.org/wiki/Java)」より

# OpenJDK

[OpenJDK - Wikipedia](https://ja.wikipedia.org/wiki/OpenJDK)

Javaのバージョン **7** 以降、OpenJDKで管理されているみたいです。
ソースコード原本を管理しているのは、[https://openjdk.java.net/](https://openjdk.java.net/) ←ここみたいです。

- [Oracle JDK](https://www.oracle.com/java/technologies/javase-downloads.html)<br>名称のとおりOracleが配布しているJDKです。
- [AdoptOpenJDK](https://adoptopenjdk.net/)<br>いくつかの[スポンサー](https://adoptopenjdk.net/sponsors.html)が提供しているJDK、AWS、IBM、Microsoftとかが入っている。
- [Amazon Corretto](https://aws.amazon.com/jp/corretto/)<br>名称のとおり、Amazonが提供しているJDKです。

Amazon（AWS）が、AdoptOpenJDKとAmazon Correttoの両方を提供しているが、Amazon Correttoの方がサポート期間が長くAmazonのパッチが入っているとの事なので、AWSで利用する場合はAmazon Correttoの方が良いのかもしれない。

どちらにせよ、実際に動かすJavaを利用した方が良い気がします。

> OpenJDKとAmazon Correttoは、拡張子がdebというdebianパッケージが配布されていますので、それをaptでインストールするみたいです。
AdoptOpenJDKは、tar.gzのアーカイブが配布されていますので、展開してパスを通すことでインストールするみたいです。

# インストール

## JDK

LubuntuにJDKをインストールします。
aptで管理されているJDKを見てみます。
`sudo apt search ^openjdk-.*-jdk$`

```sh
$ sudo apt search ^openjdk-.*-jdk$
ソート中... 完了
全文検索... 完了  
openjdk-11-jdk/focal-updates,focal-security 11.0.10+9-0ubuntu1~20.04 amd64
  OpenJDK Development Kit (JDK)

openjdk-13-jdk/focal-updates 13.0.4+8-1~20.04 amd64
  OpenJDK Development Kit (JDK)

openjdk-14-jdk/focal-updates 14.0.2+12-1~20.04 amd64
  OpenJDK Development Kit (JDK)

openjdk-8-jdk/focal-updates,focal-security 8u282-b08-0ubuntu1~20.04 amd64
  OpenJDK Development Kit (JDK)
```

openjdk-11-jdkをインストールします。
`sudo apt install openjdk-11-jdk`


```sh
$ sudo apt install openjdk-11-jdk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libcanberra-gtk3-0 libcanberra-gtk3-module
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  ca-certificates-java fonts-dejavu-extra java-common libatk-wrapper-java
  libatk-wrapper-java-jni libice-dev libpthread-stubs0-dev libsm-dev libx11-dev
  libxau-dev libxcb1-dev libxdmcp-dev libxt-dev openjdk-11-jdk-headless
  openjdk-11-jre openjdk-11-jre-headless x11proto-core-dev x11proto-dev
  xorg-sgml-doctools xtrans-dev
提案パッケージ:
  default-jre libice-doc libsm-doc libx11-doc libxcb-doc libxt-doc openjdk-11-demo
  openjdk-11-source visualvm fonts-wqy-microhei | fonts-wqy-zenhei
以下のパッケージが新たにインストールされます:
  ca-certificates-java fonts-dejavu-extra java-common libatk-wrapper-java
  libatk-wrapper-java-jni libice-dev libpthread-stubs0-dev libsm-dev libx11-dev
  libxau-dev libxcb1-dev libxdmcp-dev libxt-dev openjdk-11-jdk
  openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless x11proto-core-dev
  x11proto-dev xorg-sgml-doctools xtrans-dev
アップグレード: 0 個、新規インストール: 21 個、削除: 0 個、保留: 0 個。
267 MB のアーカイブを取得する必要があります。
この操作後に追加で 422 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
取得:1 http://archive.ubuntu.com/ubuntu focal/main amd64 java-common all 0.72 [6,816 B]
取得:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.10+9-0ubuntu1~20.04 [37.3 MB]
取得:3 http://archive.ubuntu.com/ubuntu focal/main amd64 ca-certificates-java all 20190405ubuntu1 [12.2 kB]
:
<中略>
:
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
```

インストールできました。
※：ネットワークのせいかかなり時間がかかりました。

バージョンを確認してみます。
`java -version`

```sh
$ 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)
```

## Maven

Java用プロジェクト管理ツールであるMavenをインストールします。
似たようなツールとしてGradleがありますが、ちょっと学習コストがかかりそうなので、Mavenを選択しました。
将来的にはGradleも使うかもしれません。

aptで管理されているMavenを見てみます。
`sudo apt search ^maven$`


```sh
$ sudo apt search ^maven$
ソート中... 完了
全文検索... 完了  
maven/focal,focal 3.6.3-1 all
  Java ソフトウェアプロジェクトの管理・包括ツール
```

インストールします。
`sudo apt install maven`


```sh
$ sudo apt install maven
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libaopalliance-java libapache-pom-java libatinject-jsr330-api-java
  libcdi-api-java libcommons-cli-java libcommons-io-java libcommons-lang3-java
  libcommons-parent-java libgeronimo-annotation-1.3-spec-java
  libgeronimo-interceptor-3.0-spec-java libguava-java libguice-java
  libhawtjni-runtime-java libjansi-java libjansi-native-java libjsr305-java
  libmaven-parent-java libmaven-resolver-java libmaven-shared-utils-java
  libmaven3-core-java libplexus-cipher-java libplexus-classworlds-java
  libplexus-component-annotations-java libplexus-interpolation-java
  libplexus-sec-dispatcher-java libplexus-utils2-java libsisu-inject-java
  libsisu-plexus-java libslf4j-java libwagon-file-java libwagon-http-shaded-java
  libwagon-provider-api-java
提案パッケージ:
  libaopalliance-java-doc libatinject-jsr330-api-java-doc libservlet3.1-java
  libcommons-io-java-doc libcommons-lang3-java-doc libasm-java libcglib-java
  libjsr305-java-doc libmaven-shared-utils-java-doc liblogback-java
  libplexus-cipher-java-doc libplexus-classworlds-java-doc
  libplexus-sec-dispatcher-java-doc libplexus-utils2-java-doc junit4 testng
  libcommons-logging-java liblog4j1.2-java
以下のパッケージが新たにインストールされます:
  libaopalliance-java libapache-pom-java libatinject-jsr330-api-java
  libcdi-api-java libcommons-cli-java libcommons-io-java libcommons-lang3-java
  libcommons-parent-java libgeronimo-annotation-1.3-spec-java
  libgeronimo-interceptor-3.0-spec-java libguava-java libguice-java
  libhawtjni-runtime-java libjansi-java libjansi-native-java libjsr305-java
  libmaven-parent-java libmaven-resolver-java libmaven-shared-utils-java
  libmaven3-core-java libplexus-cipher-java libplexus-classworlds-java
  libplexus-component-annotations-java libplexus-interpolation-java
  libplexus-sec-dispatcher-java libplexus-utils2-java libsisu-inject-java
  libsisu-plexus-java libslf4j-java libwagon-file-java libwagon-http-shaded-java
  libwagon-provider-api-java maven
アップグレード: 0 個、新規インストール: 33 個、削除: 0 個、保留: 0 個。
9,209 kB のアーカイブを取得する必要があります。
この操作後に追加で 12.1 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
取得:1 http://archive.ubuntu.com/ubuntu focal/universe amd64 libapache-pom-java all 18-1 [4,720 B]
取得:2 http://archive.ubuntu.com/ubuntu focal/universe amd64 libatinject-jsr330-api-java all 1.0+ds1-5 [5,348 B]
取得:3 http://archive.ubuntu.com/ubuntu focal/universe amd64 libgeronimo-interceptor-3.0-spec-java all 1.0.1-4fakesync [8,616 B]
:
<中略>
:
libmaven3-core-java (3.6.3-1) を設定しています ...
maven (3.6.3-1) を設定しています ...
update-alternatives: /usr/bin/mvn (mvn) を提供するために自動モードで /usr/share/maven/bin/mvn を使います
```

バージョンを確認します。
`mvn -version`

```sh
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.10, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.8.0-43-generic", arch: "amd64", family: "unix"
```

# まとめ

バージョンなどを調べていたら結構時間がかかってしまいました。
サイトによってはaptで管理されていものではなく、最新版をインストールしたりしていましたが、私の環境では、aptで管理されているものと最新版とかわりがないように見えました。
そもそも、多少のバージョンの差異はしかたないとは思います。

最後の部分は、以下のようにJDKとMavenは同時にインストールした方が良かったかもしれません。
`sudo apt install openjdk-11-jdk maven`