---
title: Cloud FoundryのJava BuildpackでJava 12を使う
tags: ["Cloud Foundry", "Java", "Java SE 12", "Docker"]
categories: ["Dev", "PaaS", "CloudFoundry"]
date: 2019-04-02T02:19:49Z
updated: 2019-04-02T02:19:49Z
---

[Java Buildpack v4.19](https://github.com/cloudfoundry/java-buildpack/releases/tag/v4.19)でJava 12がサポートされたので使ってみます。

Spring InitilizrでJava 12用のプロジェクトを作成します。

```
curl https://start.spring.io/starter.tgz \
       -d artifactId=demo-java12 \
       -d baseDir=demo-java12 \
       -d dependencies=web,actuator \
       -d packageName=com.example \
       -d javaVersion=12 \
       -d applicationName=DemoJava12Application | tar -xzvf -
```

Dockerを使えば、開発端末にJDK 12がインストールされていない状態でJDK 12を使ってアプリケーションをビルドできます。

```
docker run --rm \
           -v ~/.m2:/root/.m2 \
           -v "$PWD":/usr/src \
           -w /usr/src \
           maven:3-jdk-12 \
           mvn clean package
```

Cloud Foundryにデプロイするために`manifest.yml`を作成します。
Java Buildpackでは当面はJava8がデフォルトで使用されますが、
JREのバージョンは環境変数`JBP_CONFIG_OPEN_JDK_JRE`で指定可能です。

``` yml
applications:
- name: hello-java12
  buildpacks: # cf buildpacksでbuildpack一覧を確認してjava_buildpackのバージョンが4.19以上であれば設定不要
  - https://github.com/cloudfoundry/java-buildpack.git#v4.19
  path: target/demo-java12-0.0.1-SNAPSHOT.jar
  memory: 768m
  env:
    JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 12.+}}'
```

これで`cf push`すれば、Staging中に次のようなログが出力されます。`12.0.0_33`が使われていることがわかります。

```
   2019-04-02T11:01:43.23+0900 [STG/0] OUT -----> Java Buildpack v4.19 | https://github.com/cloudfoundry/java-buildpack.git#bc3bba5
   2019-04-02T11:01:43.38+0900 [STG/0] OUT -----> Downloading Jvmkill Agent 1.16.0_RELEASE from https://java-buildpack.cloudfoundry.org/jvmkill/bionic/x86_64/jvmkill-1.16.0_RELEASE.so (0.0s)
   2019-04-02T11:01:46.22+0900 [STG/0] OUT -----> Downloading Open Jdk JRE 12.0.0_33 from https://java-buildpack.cloudfoundry.org/openjdk/bionic/x86_64/openjdk-jre-12.0.0_33-bionic.tar.gz (2.8s)
   2019-04-02T11:01:47.79+0900 [STG/0] OUT        Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.5s)
   2019-04-02T11:01:47.79+0900 [STG/0] OUT        JVM DNS caching disabled in lieu of BOSH DNS caching
   2019-04-02T11:01:47.85+0900 [STG/0] OUT -----> Downloading Open JDK Like Memory Calculator 3.13.0_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/bionic/x86_64/memory-calculator-3.13.0_RELEASE.tar.gz (0.0s)
   2019-04-02T11:01:48.19+0900 [STG/0] OUT        Loaded Classes: 18756, Threads: 250
   2019-04-02T11:01:48.23+0900 [STG/0] OUT -----> Downloading Client Certificate Mapper 1.8.0_RELEASE from https://java-buildpack.cloudfoundry.org/client-certificate-mapper/client-certificate-mapper-1.8.0_RELEASE.jar (0.0s)
   2019-04-02T11:01:48.28+0900 [STG/0] OUT -----> Downloading Container Security Provider 1.16.0_RELEASE from https://java-buildpack.cloudfoundry.org/container-security-provider/container-security-provider-1.16.0_RELEASE.jar (0.0s)
   2019-04-02T11:01:48.34+0900 [STG/0] OUT -----> Downloading Spring Auto Reconfiguration 2.7.0_RELEASE from https://java-buildpack.cloudfoundry.org/auto-reconfiguration/auto-reconfiguration-2.7.0_RELEASE.jar (0.0s)
```

System Propertiesをみると`java.runtime.version`が`12+33`になっているのがわかります。

![image](https://user-images.githubusercontent.com/106908/55370940-3b6be600-5537-11e9-8e39-f60ac5e87930.png)


Java 12を使う機会はあまりないと思いますが、一応参考までに。
