OpenJAVA で Spring Boot

# はじめに
Spring Boot って便利ですよね!

Javaで少し規模が大きなWebアプリケーションを開発しようと思ったら、アプリケーションフレームワークが必要になると思いますが、EJBにしてもStrutsにしてもSpring Frameworkにしても、Javaのフレームワークはなかなか手ごわい。
そこへ行くと、Spring Tool Suiteの使いやすさもあって手軽に本格的なアプリケーションを構築できるSpring Bootは本当に便利だと思います。

ところが、Spring BootのデフォルトJDKって**Oracle Java SE 8**だったりします。
OracleのJDKはライセンス条項が変更されて、開発や個人の学習用途では無償利用できるけど会社の業務として利用する場合は注意が必要ですね。
そんなわけでOpenJDKで使えないものかと考えました。

# いきなり結論から
まず、できたのかできないのかが気になるところなので結論から。
できます。全然問題ありません。少なくとも私が作成した程度のWebアプリでは
今のところ問題は出ていません。
というわけで、私の環境を以下に紹介していきます。

# Oracle JDKのアンインストールとOpenJDKのインストール
これまで、なんだかんだで必要だったOracle Java SE Developer kitをインストールしてありましたが、思い切ってアンインストールしました。

OpenJDKのダウンロードは、Oracle Java SEのダウンロードページに案内のある通り以下のサイトからダウンロードします。

[http://jdk.java.net/](http://jdk.java.net/)

<img width="400" alt="OpenJDK-3.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/77f955e7-1bc6-4343-cda5-c62c63b4c570.png">
<img width="400" alt="OpenJDK-4.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/2254ed24-c1a5-4493-3149-b18d3c300aa3.png">

Windows/64 の zipをダウンロードして展開し、Program Files&yen;Java の下にコピーします。

見ての通り、Program Filesの中にはOpenJDKしか入っていません。12も入ってますが、気にしないでください。^^;

<img width="526" alt="OpenJDK-1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/4041a8b3-a726-13ab-ab6a-ce1590a2fa19.png">

環境変数JAVA_HOMEにはOpenJDK-14のフォルダを、PATHにはOpenJDK-14のbinフォルダを指定しています。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_570192_207ae955-ed4f-7908-b3f6-b49f3c418589.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/3d70d869-ae13-c29e-4475-3cf21b9f8784.png)

# Spring Tool Suiteの設定

Spring Tool Suiteの方は、インストール時にJava 8がデフォルトJDKとして選択されているので、OpenJDK 14を使用するように変更します。

* [Window]->[Preferences]を開きます。
* 左のペインから[Java]->[Installed JREs]を選択します。
* [Add]ボタンをクリックします。
* Standard VMを選択します。
<img width="559" alt="OpenJDK-5.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/c4d43632-a1c0-bb9d-345f-9a51114acba8.png">
* JRE Definitionダイアログの一番上にあるJRE home: の[Directory...]をクリックします。
<img width="559" alt="OpenJDK-5-2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/f1c59ab9-3eee-07be-acd9-d8a376d79a1f.png">
* C:&yen;Program Files&yen;Java&yen;jdk-14.0.1フォルダを選択します。
<img width="519" alt="OpenJDK-6.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/17485365-0e4b-c862-5dac-b9f88ca5def0.png">
* jdk-14.0.1が追加されますので、[finish]をクリックします。
<img width="559" alt="OpenJDK-7.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/32379f12-d111-5e75-6a4d-a5028d848351.png">
* Installed JREsにjdk-14.0.1が追加されます。もしチェックが入っていなかったら、チェックを入れてApplyをクリックしてください。
<img width="693" alt="OpenJDK-8.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/77be04f9-aa4d-2e3f-d1fc-3c564ed0dc33.png">

これでだいたい大丈夫だと思いますが、プロジェクトのライブラリ参照や実行環境を編集する必要がある場合があるみたいなので、以下に手順を記述します。

## ライブラリパスの追加

* [Project]->[Preferences]を開く。
* 左のペインから[Java Build Path]を開く。
* Java Build Pathのタブのうち、[Libraries]を開く。
* ここで、Modulepathにjdk-14.0.1が選択されていれば問題なし。もし違う場合は、いったんRemoveして、[Add Library]をクリックする。
<img width="823" alt="OpenJDK-9.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/2058c391-389c-add1-1162-04bd32d75dc7.png">
* JRE System Libraryを選択して[Next]をクリックする。
<img width="559" alt="OpenJDK-10.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/19104ba7-1d87-cce2-78b7-3cdd4eae1f28.png">
* Workspace default JRE(jdk-14.0.1)を選択する。
<img width="559" alt="OpenJDK-11.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/d1a10e50-9a5b-3e25-5825-42b00813816e.png">
* ModulepathにJRE System Library[jdk-14.0.1]が追加されればOKなので、[Apply]をクリックする。
<img width="823" alt="OpenJDK-12.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/f5d9d05f-a11a-ec30-6712-df7bde9222e8.png">

## 実行環境の設定

Spring Tool Suiteで「Run as」により実行する場合のJREを設定します。

* Package Explorerでプロジェクトフォルダを右クリック->[Run As]->[Run Configuration]を選択する。
* [JRE]タブを選択する。
* ここで、jdk-14.0.1が選択されていれば問題なし。もし、違うJREが選択されている場合は、[ALternate JRE]を選択して、ドロップダウンからjdk-14.0.1を選択する。
<img width="669" alt="OpenJDK-13.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/d2b345d7-872d-6cdd-6e9a-68928078b343.png">

## Mavenの設定

Mavenの依存環境設定(pom.xml)にも、Javaのバージョンを記載する場所があるのでここを14にしておきます。なお、Spring Starterプロジェクトを作成する際にJava 14を選んでおくと、最初から14が設定されています。

```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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>LoggerREST-java14</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>LoggerREST-java14</name>
	<description>Database Interface for Android</description>

	<properties>
		<java.version>14</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>
```

# Spring Boot の実行

さて、設定は終わりました。実行してみましょう。
Package Explorerでプロジェクトを右クリック->[Run as]->[Spring Boot App]を選択します。
すると先頭に、OpenJDKのWarningメッセージが出ますが、「-Xverify:noneと-noverifyはdeprecatedですよ～」とのこと。Spring Tool Suiteでjavaコマンドを実行する際に、このオプションが指定されているんだと思いますが、探しても見つからなかった。とりあえず無視しても大丈夫でしょう。^^;
実際、Qiitaにアップしているプロジェクトはこの環境で動かしています。

<img width="1138" alt="OpenJDK-14.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570192/bd6963e5-53ae-39c5-f019-120ec8b89c25.png">

# まとめ

結果として、OpenJDK 14でSpring Bootは普通に動くことが判りました。
デフォルトがOracle Java8になっているのはなぜかわかりませんが、開発/実行環境はOracleの正式版を使う事で、パッケージを制作して販売する場合は相応のライセンスを購入するのが正しいという事なんでしょうね。
考えてみれば、エンタープライズ用途のLinuxは当然のようにRHELを使用して、ライセンスも購入するのが日本のITゼネコンのやり方なので。。。もっとも、ここ数年はそういった開発からは遠ざかっているので現在の状況はどうなんでしょうか。。

## 今回使用した環境
* Windows 10 Pro 1909
* OpenJDK 14.0.1
* Spring Tool Suite 4 Version 4.6.2.RELEASE
* Spring Boot v2.3.0.RELEASE