[エラー対応] インストール4jウィザードは、システム上にJava(TM)ランタイム環境を見つけることができませんでした。

OWASP ZAPをパソコンにインストールしようとしたところ、以下画像のエラーが出た。

「インストール4j ランタイム環境」というキーワードで検索してみたが見つからなかったので、今回記事として起こすことにした。同様のエラーに遭遇した方の参考になれば幸いだ。

発生環境

  • Windows 10 Home 1803
  • OpenJDK 12.0.1

発生原因

ストレートに言うと、エラー画像にもある通り「JRE」が存在しないことが原因である。事前にOpenJDKをインストールしているにも関わらず、jreが存在しないという。なぜか。

JDK 11以降はJREが配布されなくなった

JDK 10まではJDKとJREの2つのパッケージが配布されていたが、JDK 11以降はJREが配布されなくなっていた。その理由として「新たなアプリケーションの配布方法」がある。
こちらのページの下部に、以下の説明がある。

軽量化したJREをバンドルする配布方式の提案
Javaアプリケーションは現在、システムにインストールされたJREを使って実行されていますが、近年はこの実行モデルが多くの弊害を生んでいます。Javaの脆弱性問題から最新版のJREに移行する必要が生じた際、ユーザー側はアプリケーション・ベンダーが最新版を推奨していないために移行できず、一方でアプリケーション・ベンダー側は多くのユーザーが旧バージョンを利用しており、サポートの手間を考慮すると簡単には移行できないといったジレンマが生じるケースもあるでしょう。
このような問題が起きる原因の1つは、「Javaアプリケーションの実行環境としてJREをプリインストールし、開発元が異なる全てのアプリケーションを同じJREで実行する」という実行モデルにあると考えられます。オラクルは今後、この問題の解決策となる新たなアプリケーション配布方法についても具体策を提案/提供していきます。
例えば、今後は使用するJREをアプリケーション側でコントロールし、個別にバンドルするという方法が考えられます。オラクルは、これまでもこの方法を提案してきましたが、その実現には1つの課題がありました。それは「JREのサイズ」の問題です。
Java SE 8までのJava仕様ではJREのサブセットを作ることはできず、アプリケーションが使わないライブラリも含めたフルセットの巨大なJREをバンドルする必要がありました。この問題はJDK 9で導入されたProject Jigsawによって解決され、現在はアプリケーションが必要とするライブラリだけで構成したJREのサブセットを作り、バンドルすることが可能となっています。これにより、それぞれのアプリケーションにバンドルするJREのサイズを最小化することができます。Project Jigsawの導入に伴いライブラリ間の依存関係を整理した結果、JREの起動時間も短縮されています。
これらを踏まえ、今後はカスタマイズしたJREをアプリケーションにバンドルする方法を推奨していくとともに、JREのカスタマイズ・ツールとしてJDK 9よりバンドルを開始した「jlink」の機能拡充を進めていきます。

今回のOWASP ZAPは、JREが必要な旧来方式のJavaアプリケーションであると考えられる。JDK 11以降を導入している環境上で、旧来方式のJavaアプリケーションを実行する場合は、追加でJREを導入する必要がある。

解決手段

ひとまず、本記事の執筆時点で公開されているJRE Version 8 Update 211 をインストール。

https://www.java.com/ja/download/

インストール後に再度OWASP ZAPのインストールを試したところ、正常にインストールできた。

[BoskampiによるPixabayからの画像]