結局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
サンプルアプリはこちらです。