📝 BLOG.IK.AM

@making's memo
(🗃 Categories 🏷 Tags)

Cloud FoundryのJava BuildpackでJava 10を使う

🗃 {Dev/PaaS/CloudFoundry}

🏷 Cloud Foundry 🏷 Docker 🏷 Java 🏷 Java SE 10

🗓 Updated at 2018-06-15T15:48:09+09:00 by Toshiaki Maki  🗓 Created at 2018-06-15T15:48:09+09:00 by Toshiaki Maki  {✒️️ Edit  ⏰ History}


結局Java 9使わないままJava 10が出て、Java 10も使わないままJava 11になりそうな雰囲気ですが、
Java 10をようやく使い、Cloud Foundryにアプリをデプロイしました。

Java BuildpackにはJREも同梱されているのですが、基本的にLTSのものしか含まれないので、
プラットフォーム側で用意されているOffline Buildpackは現時点ではJava 8しか使えませんし、9と10は今後も使えません。

Java 10を使うにはBuildpackをカスタマイズするかOnline Buildpack(GitHubのURLを指定する)を使って使用するJREを明示する必要があります。

JRE取得先のデフォルトレポジトリはhttps://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/index.ymlです。
ここにリストアップされているバージョンのJREは環境変数JBP_CONFIG_OPEN_JDK_JREで指定可能です。
例えば、10.0の最新版を使いたい場合は次のような設定を行います。

applications:
- name: hello-java10
  buildpack: https://github.com/cloudfoundry/java-buildpack.git#v4.12
  path: target/demo-java10-0.0.1-SNAPSHOT.jar
  memory: 1g
  env:
    JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 10.0.+}}'

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

2018-06-15T12:50:21.11+0900 [STG/0] OUT Downloaded app package (14.8M)
2018-06-15T12:50:25.09+0900 [STG/0] OUT -----> Java Buildpack v4.12 | https://github.com/cloudfoundry/java-buildpack.git#947f2f7
2018-06-15T12:50:25.50+0900 [STG/0] OUT -----> Downloading Jvmkill Agent 1.12.0_RELEASE from https://java-buildpack.cloudfoundry.org/jvmkill/trusty/x86_64/jvmkill-1.12.0_RELEASE.so (0.0s)
2018-06-15T12:50:26.43+0900 [STG/0] OUT -----> Downloading Open Jdk JRE 10.0.1_10 from https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-10.0.1_10.tar.gz (0.9s)
2018-06-15T12:50:28.79+0900 [STG/0] OUT        Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (2.3s)
2018-06-15T12:50:28.79+0900 [STG/0] OUT        JVM DNS caching disabled in lieu of BOSH DNS caching
2018-06-15T12:50:28.85+0900 [STG/0] OUT -----> Downloading Open JDK Like Memory Calculator 3.13.0_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/trusty/x86_64/memory-calculator-3.13.0_RELEASE.tar.gz (0.0s)
2018-06-15T12:50:29.61+0900 [STG/0] OUT        Loaded Classes: 18633, Threads: 250
2018-06-15T12:50:29.71+0900 [STG/0] OUT -----> Downloading Client Certificate Mapper 1.6.0_RELEASE from https://java-buildpack.cloudfoundry.org/client-certificate-mapper/client-certificate-mapper-1.6.0_RELEASE.jar (0.0s)
2018-06-15T12:50:29.84+0900 [STG/0] OUT -----> Downloading Container Security Provider 1.13.0_RELEASE from https://java-buildpack.cloudfoundry.org/container-security-provider/container-security-provider-1.13.0_RELEASE.jar (0.1s)
2018-06-15T12:50:29.96+0900 [STG/0] OUT -----> Downloading Spring Auto Reconfiguration 2.4.0_RELEASE from https://java-buildpack.cloudfoundry.org/auto-reconfiguration/auto-reconfiguration-2.4.0_RELEASE.jar (0.1s)

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

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

サンプルアプリはこちらです。