CLOVER🍀

That was when it all began.

Ubuntu Linux 18.04 LTSに、OpenJDK 11をインストールする

Ubuntu Linux 18.04 LTSで、やっと本当に(※)OpenJDK 11が使えるようになったみたいなので、インストールしたいと思います。
※後述

openjdk-lts package : Ubuntu

環境。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

インストールは、「openjdk-11-jdk」を指定。

$ sudo apt install openjdk-11-jdk

GUIなどが不要であれば、「openjdk-11-jdk-headless」で。

$ sudo apt install openjdk-11-jdk-headless

確認。

$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)


$ javac -version
javac 11.0.2

OpenJDK 8なども入れている場合、切り替えは「update-alternatives」で。javaコマンドの場合。

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

  選択肢    パス                                          優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      自動モード
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      手動モード
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 

javacコマンドの場合。

$ sudo update-alternatives --config javac
alternative javac (/usr/bin/javac を提供) には 2 個の選択肢があります。

  選択肢    パス                                        優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      自動モード
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      手動モード
  2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 

簡単に確認してみましょう。

Maven。

$ mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T04:00:29+09:00)
Maven home: $HOME/.sdkman/candidates/maven/current
Java version: 11.0.2, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-47-generic", arch: "amd64", family: "unix"

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.littlewings.example</groupId>
    <artifactId>hello-java11</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

</project>

用意したサンプルプログラム。
src/main/java/org/littlewings/example/App.java

package org.littlewings.example;

public class App {
    public static void main(String... args) {
        var message = "Hello World!!";
        System.out.println(message);
    }
}

実行。

$ mvn compile exec:java -Dexec.mainClass=org.littlewings.example.App
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------< org.littlewings.example:hello-java11 >----------------
[INFO] Building hello-java11 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-java11 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello-java11 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /path/to/hello-java11/target/classes
[INFO] 
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ hello-java11 ---
Hello World!!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.244 s
[INFO] Finished at: 2019-04-20T17:44:09+09:00
[INFO] ------------------------------------------------------------------------

できました、と。

本当にOpenJDK 11が使えるようになった?

Ubuntu Linux 18.04 LTSのリリース時には、OpenJDK 11がまだリリースされておらず、できればLTS相当の11を使いたい
Ubuntu LinuxのLTSではちょっといろいろとありました。

OpenJDK SRU exception

Ubuntu Linux 18.04 LTSのリリース時には、「openjdk-11-jdk」を指定してインストールすると実際にはOpenJDk 10が
インストールされる状態とし、OpenJDK 11のリリース後に差し替える予定だったようです。

それが、ようやく行われた、という話でした。