torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 8の安定感

はじめに

これからソフトウェア開発を始めるプロジェクトでプログラミング言語Javaを使う場合に、Javaのバージョンをどうしようかと調べたことを書き付けます。

開発するソフトウェアは、5年から10年、場合によってはそれ以上使われることが想定されます*1

Javaのバージョンとライフサイクル

OracleRed Hat、Azul Systems、および Bell softwareが提供するJava SE Development Kitのサポート期限を調べてみました。

製品 サポート期限
Oracle Java SE 8 2030年12月*2
Oracle Java SE 11 2026年9月*3
Red Hat OpenJDK 8 2026年5月
Red Hat OpenJDK 11 2024年10月
Azul Zulu Enterprise 8 2030年12月
Azul Zulu Enterprise 11 2027年9月
Azul Zulu Community 8 2026年3月
Azul Zulu Community 11 2027年9月
Liberica JDK 8 2031年3月
Liberica JDK 11 2027年3月

Oracleのサポートは3段階あるうちの2段階目のExtended Supportの期限を記載しています。製品リリース後所定の期間がPremier Support期間で、続いてサポート料金が上済みされるがほぼ同等のサービスを提供するExtended Support期間となります。

参照情報

ビルドツールとの相性

JDK 8環境では、各種ツールとの相性はよかったのですが、JDK 11環境となるとまだまだ整っていない部分があります。

NetBeans IDE

NetBeans IDE 8.2はJava SE8対応ですが、Java SE 11を使うには、Apache NetBeans 10以降を使うことになります。しかしながら、NetBeans は8.2のリリースの後、OracleからApacheへ移管し、Apache incubatorのフェーズを経て2019年4月にApache正式プロジェクトへ昇格しました。

Java SE 8の開発であれば、NetBeans IDE 8.2が使えますが、Java SE 11の開発となると、現時点ではApache NetBeans 11.3 になります。ただ、OracleからApacheへの移行に伴い、プラグインサイトの更新が追い付いていない感があり、安定して利用するには少々時間がかかりそうと思います。

JPMS対応

Apache Ant、Gradleは、JPMS(Java Platform Module Systems)対応が遅れており、Apache Mavenがやっと、というところです。

FindBugs

FindBugsは開発が停滞しており、JDK 11への対応が厳しいかなという状況です。SpotBugsに差し替えるのが有効な解決策の1つですが、NetBeans IDEに組み込むプラグインがまだない模様です。Eclipse用はありますが。

javapackagerの喪失

JDK 11ではjavapackagerが削除され、WindowsインストーラーやLinuxインストーラー(RPMパッケージ他)を作るのが面倒になりました。

外部ライブラリとの相性

Endorsed Standards Override Mechanismの廃止

クラスパスの設定にEndorsed Standards Override Mechanismを使っているライブラリはJDK 11では動かなくなります。(バッチファイル、シェルスクリプトファイルなので、クラスパス指定する等の修正をすれば動作) 例)JacORB 3.9

まとめ

Java SE 11がリリースされてから2年半が経過していますが、まだ周辺ツールが追い付いておらず、開発に使う場合の安定感はJava SE 8の方が高いです。

JDKのライフサイクルを見ると、Azul SystemsとBellSoftwareが提供するJDKについては、2021年9月リリース予定のJDK 17ですらJDK 8よりライフサイクルが短く、2024年9月リリース予定のJDK 23でようやくJDK 8のライフサイクルを超えるサポート期限となります。

もちろん、モジュールシステムや新しいAPI、新しい言語仕様、新しいGCなどの機能がどんどん取り込まれているので使いたい気持ちは山々なのですが、上述のとおりライフサイクルや開発環境(IDEだけでなく、品質チェック、ビルド、リリース等)を考慮すると、Java SE 11に移行すべきと言い切れないというのが現段階です。

*1:ちなみに、12年前に開発に携わったシステムは今も使われています

*2:Extended Support期限

*3:Extended Support期限