web-dev-qa-db-ja.com

Javaに組み込まれた自己完結型アプリケーション

Java= 9で自己完結型アプリケーションについて簡単に述べたオンラインプレゼンテーションをいくつか見ましたが、片付けたい質問があります。

新しいモジュールシステムでは、アプリケーションの実行に必要な最小限のコードのみを含めることができるようになりました。しかし、アプリケーションを実行したいシステムはまだJREを必要としますか、それともプログラム内の基本モジュールに含めることができるものですか?

最新バージョンをダウンロードするページ( ここ )Javaにはバージョン8_151がまだ表示されているので、後者だと思います。

TL; DR-Java 9を使用すると、JRE/Javaがインストールされていないシステムで実行できる自己完結型の実行可能ファイルを作成できますか?

14
Jacob G.

jlink

はい、これは可能です with jlinkJEP 282 )、ただしすべてのコードおよび依存関係はモジュラーJAR(つまり、module-info.class)。それはこのように動作します:

jlink
    --module-path $Java_HOME/jmods:mods
    --add-modules your.app
    --launcher launch-app=your.app
    --output your-app-image

詳細に:

  • --module-pathは、モジュールを含むフォルダを一覧表示します-これには、使用するJDKに同梱されているプラ​​ットフォームモジュールを含める必要があります($Java_HOME/jmods)とアプリケーションモジュール(mods
  • --add-modulesは、ランタイムイメージに含めるモジュールに名前を付けます-その(それらの)推移的な依存関係のすべてが含まれます
  • --launcherはオプションですが、非常に便利です。 OS固有のランチャー(例:.bat(Windowsの場合)指定された名前(launch-app)指定されたモジュール(your.app;この場合、メインクラスが定義されていると想定しています)
  • --outputは、ランタイムイメージを作成する場所を指定します
11
Nicolai

jpackage:

編集(コメントで指摘)として、javapackagerはJava-10のJDKから削除され、 jpackageの使用を楽しみにしています Java-14以降のインキュベーションツールとして。

javapackager

javapackagerツールを使用できます。

Javaパッケージツールは、いくつかの形式の自己完結型アプリケーションパッケージの組み込みサポートを提供します。

基本パッケージは、すべてのアプリケーションリソースとJREを含むハードドライブ上の単一のフォルダーです。パッケージはそのまま再配布することも、インストール可能なパッケージ(EXEまたはDMG形式など)をビルドすることもできます。

これらのアプリケーションをjavapackagerを使用してビルドすると、次のような特定の制限がありますが、

  • 自己完結型のアプリケーションパッケージは、Antタスクまたはjavapackager -deployコマンドにネイティブ引数を渡すことによって明示的に要求する必要があります。

  • 自己完結型アプリケーションパッケージは、実行する予定のオペレーティングシステム上にビルドする必要があります。特定の形式でパッケージをビルドするには、前提条件のツールが利用可能である必要があります。

  • 自己完結型アプリケーションパッケージは、JDK 7 Update 6以降を使用してのみビルドできます。 JDK 9のJava Packagerは、JDK 9ランタイムイメージを使用してアプリケーションをパッケージ化します。 JDK 8またはJDK 7 JREをアプリケーションとパッケージ化するには、JDK 8 Java Packagerを使用します。


基本的な自己完結型アプリケーションを作成する1つの方法は、 deploy antタスクを変更することです:-

<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
           nativeBundles="all"
           outdir="${basedir}/${dist.dir}" outfile="${application.title}">
    <fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
    <fx:resources>
        <fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
    </fx:resources>
    <fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>

javapackager コマンドツールを使用して、ネイティブパッケージをビルドできます。 Java自己完結型アプリケーションパッケージを生成するパッケージャコマンドは次のようになります-

javapackager -deploy -native -outdir OUTPUT_DIR -outfile APPLICATION_NAME 
    -srcdir PACKAGE_SRC_DIR -srcfiles APPLICATION.jar -appclass MAIN_CLASS
    -name "YourApplication" -title "SelfContained"
7
Naman