はじめに
私が開発と運用保守をしているWebサービスがJava8で動作していたためJava11対応をしてみた際の備忘です。
経緯
Webサービスが無事リリースされ安心し始めた、2018年2月頃に以下発表を読んで愕然としました。
リリースしたWebサービスの環境の寿命が近づいていることに。
春頃からJava界隈の様子見と情報収集をしながら、夏頃から対応作業を始めました。
- [来月にはJava 10が登場し、9月にはJava 11が登場予定。新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる(OpenJDKに関する追記あり] (https://www.publickey1.jp/blog/18/java_109java_11java.html)
対応前の環境
1年程度前から稼働しているサービスということもあり、当時の開発環境として以下で該当サービスが構成されていました。
各ツールはタイミングを見ながら更新していたため、メジャーバージョン以外は比較的新しめな状態でした。
- アプリケーション
- Java : OpenJDK8
- Build Tool : Gradle 4.8
- Application Framework : Spring Boot 1.5.13.RELEASE
- Test Framework : JUnit 4.12
- CI/CD
- Jenkins 2.120.x
- コード解析
- SonarQube 6.4(SonarJavaPlugin 5.0利用)
対応後の環境
2018年11月中旬頃の各ツールの最新版、または安定版で構成しました。
- アプリケーション
- Java : OpenJDK11(11.0.1)
- Build Tool : Gradle 5.0RC1
- Application Framework : Spring Boot 2.1.0.RELEASE
- Test Framework : JUnit 5.3.1
- CI/CD
- Jenkins 2.138.2
- コード解析
- SonarQube 7.1(SonarJavaPlugin 5.9利用)
対応の流れ
概ね以下のような流れでJava11対応を実施しました。
- 2018年2月 Javaのサポートライフサイクルの変更に愕然とする(暫く見なかったことにしていました)
- 2018年7月 OpenJDK11にアップデートすることを決意
- 2018年8月 OpenJDK10、Spring Boot 2.0にアップデートをし様子見
- 2018年9月 OpenJDK11 EarlyRelease、Spring Boot 2.1.0.Milestoneにアップデートし様子見
- 2018年10月 OpenJDK11 GA、Spring Boot 2.1.0.RELEASEにアップデートし本格対応
- 2018年11月初旬 たくさんテストする ※一番大変な時期。この時期にJUnit4からJUnit5にテストコードを変更
- 2018年11月中旬 商用サービス環境にリリース
2018年10月のツール正式リリースからはBug対応やテストコード変更でバタつきましたが、事前に様子見でアップデートをしていたため、大きな問題は発生しませんでした。
正式リリースから実質1ヶ月弱の期間で商用サービスとしてリリースできたのは良かったかなと。
残課題
急ぎ対応したこともあり、以下は課題として残りましたが、12月以降順次対応しています。
- Java11対応のGradle5.0のリリース遅れ(当初11月初旬の見通しだった)に伴い、RC版を利用した
- JUnit5としてのテストコード最適化が不足
- JDK9以降に採用された新機能や便利機能に適応できなかった
感想
バタつきましたが無事、2019年1月のJDK8のサポート終了に間に合ったのと、比較的最新のツールに移行できたのは良かったなと。
これで2019年3月のJava12リリースまでは延命できたので次はJava12対応の準備をしていこうかなと考えています。