1 パッケージ化の概要

パッケージ化ツールjpackageを使用すると、モジュラおよび非モジュラJavaアプリケーションのインストール可能パッケージを生成できます。Linux、macOSおよびWindowsのプラットフォーム固有パッケージは、ユーザーに、アプリケーションのインストールおよび起動に使い慣れた方法を提供します。

最も単純な形式のパッケージ化では、入力としてビルド済Javaアプリケーションを取得し、プラットフォームに依存するデフォルト形式のインストール可能なパッケージを生成します。パッケージ化ツールでは、jlinkコマンドを使用してアプリケーションのランタイムが生成されます。

より高度な機能を必要とするアプリケーションの場合は、次のような機能のコマンドライン・オプションを使用できます:

  • カスタム・アイコンの指定
  • 特定の場所へのアプリケーションのインストール
  • アプリケーションの起動時に使用するJVMオプションとアプリケーション引数の指定
  • 関連付けられているファイル・タイプを開く際にアプリケーションを起動するファイル・アソシエーションの設定
  • プラットフォーム固有のメニュー・グループからのアプリケーションの起動
  • アプリケーションへの複数のランチャの設定
  • バンドルへの署名(macOSのみ)

jpackageとそのオプションの詳細は、Java Development Kitツール仕様jpackageコマンドに関する項を参照してください。

パッケージ化の前提条件

アプリケーション・パッケージは、ターゲット・プラットフォーム上にビルドする必要があります。パッケージ化に使用するシステムには、パッケージ化ツールに必要なアプリケーション、JDKおよびソフトウェアが含まれている必要があります。

アプリケーションを複数のプラットフォームでパッケージ化するには、各プラットフォームでパッケージ化ツールを実行する必要があります。プラットフォームに複数のフォーマットが必要な場合、フォーマットごとに1回ツールを実行する必要があります。

次のプラットフォームおよびフォーマットが必須のソフトウェアとともにサポートされています:

  • Linux: debrpm:

    • Red Hat Linuxの場合、rpm-buildパッケージが必要です。

    • Ubuntu Linuxの場合は、fakerootパッケージが必要です。

  • macOS: dmg内のpkgapp

    パッケージに署名するように--mac-signオプションを使用してリクエストし、--iconオプションを使用してDMGイメージをカスタマイズする場合は、xcodeコマンドライン・ツールが必要です。

  • Windows: exemsi

    WiX 3.0以降が必要です。

アプリケーションの準備

アプリケーションをパッケージ化するには、まずアプリケーションをビルドし、必要なJARまたはモジュール・ファイルを作成します。アプリケーションに必要なリソースは、パッケージ化に使用するシステムでも使用可能である必要があります。

パッケージ化には、次のアプリケーション関連情報およびリソースが使用されます:

  • アプリケーションのJARまたはモジュール・ファイル
  • アプリケーション・メタデータ(名前、バージョン、説明、著作権、ライセンス・ファイルなど)
  • インストール・オプション(ショートカット、メニュー・グループ、追加のランチャ、ファイル・アソシエーションなど)
  • 起動オプション(アプリケーション引数、JVMオプションなど)

パッケージ化プロセスの一部として、入力ディレクトリのファイルに基づいたアプリケーション・イメージが作成されます。このイメージは、「生成されるアプリケーション・イメージ」で説明されています。インストール可能なパッケージを作成する前にアプリケーションをテストするには、--type app-image オプションを使用してアプリケーション・イメージのみを作成します。

生成されるアプリケーション・イメージ

パッケージ化ツールでは、ツールへの入力に基づいてアプリケーション・イメージが作成されます。

次の例は、各プラットフォームの単純なHello Worldアプリケーション用に作成されたアプリケーション・イメージを示しています。実装の詳細とみなされるファイルは変更される場合があり、表示されません。

  • Linux:

    myapp/
      bin/              // Application launchers
        HelloWorld
      lib/
        app/
          HelloWorld.cfg     // Configuration info, created by jpackage
          HelloWorld.jar     // JAR file, copied from the --input directory
        runtime/             // Java runtime image
    
  • macOS:

    HelloWorld.app/
      Contents/
        Info.plist
        MacOS/               // Application launchers
          HelloWorld
        Resources/           // Icons, etc.
        app/
          HelloWorld.cfg     // Configuration info, created by jpackage
          HelloWorld.jar     // JAR file, copied from the --input directory
        runtime/             // Java runtime image
    
  • Windows:

    HelloWorld/
      HelloWorld.exe       // Application launchers
      app/
        HelloWorld.cfg     // Configuration info, created by jpackage
        HelloWorld.jar     // JAR file, copied from the --input directory
      runtime/             // Java runtime image
    

ツールによって生成されたアプリケーション・イメージは、ほとんどのアプリケーションで機能します。ただし、必要に応じて、配布用にイメージをパッケージ化する前に変更を加えることができます。

Javaランタイム要件

ユーザーがJavaランタイムをインストールする必要がないように、アプリケーションにパッケージ化されています。パッケージ化ツールでは、アプリケーションに必要なパッケージまたはモジュールに基づいてランタイム・イメージが生成されます。

Javaランタイム・イメージがパッケージ化ツールに渡されない場合、jpackagejlinkツールを使用してアプリケーションのランタイムを作成します。パッケージ化ツールで作成されるランタイム・イメージには、デバッグ記号、通常のJDKコマンド、manページおよびsrc.zipファイルは含まれません。

  • JARファイルで構成される非モジュラ・アプリケーションの場合、生成されるランタイム・イメージにはJDKモジュールの同じセットが含まれ、これらのモジュールは通常のjavaランチャによって名前のないモジュールのクラスパス・アプリケーションに提供されます。使用可能なサービス・プロバイダは含まれませんが、--jlink-optionsオプションを使用し、--bind-services jlinkオプションを渡して、追加することができます。

    jpackage --name DynamicTreeDemo \
             --input . --main-jar DynamicTreeDemo.jar \
             --jlink-options --bind-services

    モジュールを追加するには、--add-modulesオプションを使用します:

    jpackage --name DynamicTreeDemo \
             --input . --main-jar DynamicTreeDemo.jar \
             --module-path $JAVA_HOME/jmods \
             --add-modules java.logging
  • モジュラJARファイルおよびJMODファイルで構成されるモジュラ・アプリケーションの場合、生成されるランタイム・イメージには、アプリケーションのメイン・モジュールと、そのすべての依存関係の推移閉包が含まれます。使用可能なサービス・プロバイダは含まれませんが、--jlink-optionsオプションを使用し、--bind-services jlinkオプションを渡して、追加することができます。

    jpackage --name Hello --module-path mods \
             --module com.greetings/com.greetings.Main \
             --jlink-options --bind-services

    モジュールを追加するには、--add-modulesオプションを使用します:

    jpackage --name Hello --module-path "mods:$JAVA_HOME/jmods" \
             --add-modules java.logging \
             --module com.greetings/com.greetings.Main

ノート:

--jlink-optionsオプションを指定しない場合、デフォルトでjpackagerツールは、--strip-native-commands--strip-debug--no-man-pagesおよび--no-header-filesjlinkオプションを追加します。

ツールによって生成されたランタイム・イメージは、ほとんどのアプリケーションで機能します。ただし、必要に応じて、アプリケーションとパッケージ化するためのカスタム・ランタイムを作成できます。