これからのJavaとの付き合い方を考える

はじめに

イメージ・マジックの安藤です。
皆さんは、GWはどのように過ごされたでしょうか? 私はひたすら配信サイトで映画を探して見ていました。小さい頃に何となくテレビで見た映画を改めて見るのもまた面白いものだと感じています。


さて、今回はユーザーエンドのJava、いわゆるPublic JREと近年のJavaを取り巻く環境の変化についての話です。
話の大元となるのはこちらの記事です。

JDKのリリースモデルとライセンスの変更

Java9リリース後、JDKは9月と3月の6ヶ月ごとにリリースされるようになりました。Oracleによれば、大きな機能の進捗に引っ張られて中小機能のリリースが滞ることを危惧してとのことです。
JDKのライセンスも変更になっています。ライセンスはBCLからGPL v2.0に変更されており、加えてOracle JDKとOpenJDKの機能的な違いはJava11からはなくなりました。Oracleが配布するJDKが終了することばかりが注目されていますが、この変更の本質はJRE/JDKを容易に再配布可能にすることにあるようです。
Oracleは、現在のJavaが「JREをPCにインストールして画一的に実行する」方式であることにいくつかの弊害があるとしており、JREをアプリケーションにバンドルするための方式の整備を進めています(Java9で新たに登場したモジュールもそのための改善の一環です)。

Java11以降のPublic JREの廃止と新たなアプリケーション配布方式

前述の通り、OracleはJREのアプリケーションバンドルを徐々に推し進めています。そのような中で、Java11からはPublic JRE、つまりJavaの公式サイトで入手できるJREは廃止されています。現在配布しているのはJava8ですが、個人使用のユーザに対しての無償アップデートは2020年12月末まで、それ以外の無償サポートは2019年1月に終了しました。
Java11ではjlinkというバンドル用JREを作成する機能が付いています。アプリケーションに必要なモジュールを抽出するためのjdepsという機能も付いています。今年9月にリリースされるJava13にはjarからマルチプラットフォーム向けのアプリケーションやそのインストーラを作成するjpackageという機能も追加される予定です。
バンドル用JREの作成に際してはこちらのサイトを参考にさせていただきました。

業務での方針を考える

弊社で開発中のアプリケーションではPDFの帳票印刷にJavaを使用しています。現在は実行可能JarをPCにインストールされているJavaで実行していますが、JREを配布して実行できるような仕組みを追々作成していく必要があるでしょう。 テストとしてバンドル用のJREを作成してみましたが、40MBほどの容量になりそうです。
配布するために一度圧縮する必要やアップデートの方法など検討事項がいくつかありそうなので少しずつ進めていく予定です。