web-dev-qa-db-ja.com

Javaのないシステムで実行できるようにJREをJARにバンドルするにはどうすればよいですか?

実行可能JAR内にJREをバンドルして、exeを任意のシステムで実行できるようにします。

Launch4j を試しましたが、そのアプローチでは、JREとexeの両方を出荷する必要があります。私の要件に従って、インストーラーを使用して出荷したり、クライアントマシンにJREを抽出/インストールしたりしないでください。

JREをJAR内に配置し、それを利用するにはどうすればよいですか?

7
amarnadh reddy

JARファイル内にJREを配置することはできません。 (まあ、できます...しかしそれは役に立ちません。)

あなたがする必要があるのは、インストーラーをビルドして配布することです。インストーラーを作成するための推奨される方法は、商用またはオープンソースのインストーラージェネレーターを使用することです。 (Googleが1つを見つけるのを手伝います。)

ここで説明するように、JREをZipファイルに埋め込むこともできます。

Zipファイルには、JREとアプリケーションJAR、およびそれが必要とするその他のファイルが含まれています。ユーザーは、アプリケーションをインストールするには、Zipファイルを解凍する必要があります。


..しかし、ほぼ100MBのクライアントシステムで合計JREをコピーしています。 JREを軽量化することは可能ですか?

あんまり。 JREを配布するための最も(合法的な)軽量の方法は、Oracle Javaインストーラーを配布することです。Javaバイナリライセンスは、 JREを削減します。その道を進みたい場合は最初に弁護士に相談してください!!


JREが埋め込まれたJavaアプリの配布は、間違いなく悪いことです。

  • ユーザーのディスクが複数のJREでいっぱいになります。
  • JREは、通常のセキュリティ更新/パッチ適用/監査では隠されている/見えない傾向があります。したがって、それらはセキュリティ責任になる傾向があります。
  • 疑うことを知らないユーザーに古くなった/安全でないJREを押し付けないように、配布可能なものを定期的に更新する必要があります。

Java 9以降、標準のJREを埋め込むよりも優れたソリューションがあります。新しいjlinkユーティリティを使用して、アプリケーションに合わせたJREを作成します。 https: //www.baeldung.com/jlink チュートリアルの場合、およびOracle Jlink手動エントリ

これは、組み込みJREに関する懸念に完全に対処することに注意してください。ただし、アプリケーションの更新(JVMセキュリティパッチなどを使用)の責任は、アプリの開発者/ディストリビューターの手に明確に委ねられています...間違いなく常にそうでした。関連するセキュリティパッチがリリースされるたびに、新しい配布可能ファイルを作成して利用可能にし、顧客に通知する必要があります。

10
Stephen C