Java 11 の登場で Java を取り巻く環境は様々な転換点を迎えることになりました。散々言われている Oracle からのリリース方法の変更の話もありますが、もう1つ、Public JRE の消滅があります。
実際に JDK11 をインストールして色々変化があったので、このエントリではその情報を共有したいと思います。と言っても Twitter ではこの件に関して頻繁につぶやいていたので、それを引用しながらの内容になります。
そもそも Public JRE って何?
一言で言うと「 あなたとJAVA, 今すぐダウンロード 」からダウンロードしてインストールするソフトウェアのことですw
JDK と異なり、Java アプリケーションの実行に必要なモジュールだけを OS のシステムレベルでインストールします。開発者ではなくエンドユーザー向けのソフトウェアです。次のような役割を担います。
- Executable JAR ファイルの実行
- ブラウザ Java Plug-in 経由で起動される Java Applet、Java Web Start アプリケーションの実行
- デスクトップ上での Java Web Start アプリケーションの実行
JDK11 でどう変わったか
そして、Java 11 ではこれが無くなりました。Oracle JDK 11 をインストールしたときのつぶやきを引用します。
続いてMac。こちらはインストールウィザードは今まで通り。けれどもこちらはコマンドラインでは11にスイッチされる。/usr/libexec/java_homeが返すパスが11に変わる。けど、public JREは入っておらず、public JREのディレクトリのjavaコマンドは前のバージョンを返す。Javaコンパネも10のまま。 pic.twitter.com/tqcEW7HKc8
— AOE Takashi (@aoetk) 2018年9月26日
こんな感じで本当に Public JRE のインストールがなくなりました。しかし、この時点では前のバージョンは残っており、今後 Public JRE の無償サポート (Java 8 の JRE については個人向けに対しては 2020 年までサポートを継続) が終了したときにはどうするのかという疑問点が残っていました。
Java 定期アップデート時の JRE 10 の扱い
その答えは先日の定期アップデートの時に判明しました。Public JRE をインストールしている場合、自動でアップデートチェックが走り、更新があった場合はインストールダイアログが表示されます。今回の場合、自分のマシン環境には Java 10 の Public JRE しか入っていませんでした。これは Java 11 のリリースと共に無償サポートは終了しました。
以下、そのときのつぶやきを引用します。
Public JREとしてバージョン10を入れている場合、今回のJavaの自動アップデートで10の無償アップデート期限終了に伴い、JREをクリーンアップするようになるな。スクリーンショットはWindowsだけどMacでも同じことが起きた。 pic.twitter.com/RyMTPfuZHr
— AOE Takashi (@aoetk) 2018年10月20日
そうです、自動アップデートのタイミングで無償サポート対象外の JRE のインストールを検出した場合はそれをクリーンアップするように促されます。このようにして古い JRE が放置されないようにちゃんと考えていたのですね。
てなわけで私の環境からはPublic JREが消えました。Executable JARファイルをExplorer上でダブルクリックしても何も起きないようになりました。 pic.twitter.com/aGomxWMxa5
— AOE Takashi (@aoetk) 2018年10月20日
こうして私の環境では JAR をダブルクリックしても何も起きなくなり、当然のことながら Java Applet は実行できなくなりました。
今後の Java アプリケーションの配布はどうするのか?
このようにして、システムレベルでインストールする JRE は今後無くなっていきます。では、どうやって Java アプリケーションをエンドユーザーに届けるのかというと、アプリケーション開発者が JRE と共にアプリケーションを配布することになります。
Java 9 からは配布用の JRE を生成するための jlink というツールが付属しています。アプリケーション側がちゃんとモジュラー化していれば、アプリケーションの実行に必要なモジュールだけを含んだ JRE を生成することができます。今後はこれを利用しましょう。
ただこの jlink、コマンドライン起動を想定していて、起動はシェルスクリプト (Windows 向けには bat ファイル) の形になっており、GUI アプリケーション向きではありません。そのためには javapackager と言うツールがあったのですが (過去の私の このエントリ や このエントリ で取り扱っています) 、このツールは JavaFX に付属していたものであり、 Java 11 で JavaFX が切り離された ため、JDK から無くなってしまいました。
そこで、OpenJDK では JDK 向けに javapackager 相当のものを作ろうという JEP が起案されました。
http://openjdk.java.net/jeps/343
名前は jpackager にするつもりみたいです。早く出てきて欲しいですね。