1 パッケージ化の概要
パッケージ化ツールjpackageを使用すると、モジュラおよび非モジュラJavaアプリケーションのインストール可能パッケージを生成できます。Linux、macOSおよびWindowsのプラットフォーム固有パッケージは、ユーザーに、アプリケーションのインストールおよび起動に使い慣れた方法を提供します。 
               
最も単純な形式のパッケージ化では、入力としてビルド済Javaアプリケーションを取得し、プラットフォームに依存するデフォルト形式のインストール可能なパッケージを生成します。パッケージ化ツールでは、jlinkコマンドを使用してアプリケーションのランタイムが生成されます。 
               
より高度な機能を必要とするアプリケーションの場合は、次のような機能のコマンドライン・オプションを使用できます:
- カスタム・アイコンの指定
- 特定の場所へのアプリケーションのインストール
- アプリケーションの起動時に使用するJVMオプションとアプリケーション引数の指定
- 関連付けられているファイル・タイプを開く際にアプリケーションを起動するファイル・アソシエーションの設定
- プラットフォーム固有のメニュー・グループからのアプリケーションの起動
- アプリケーションへの複数のランチャの設定
- バンドルへの署名(macOSのみ)
jpackageとそのオプションの詳細は、Java Development Kitツール仕様のjpackageコマンドに関する項を参照してください。
               
パッケージ化の前提条件
アプリケーション・パッケージは、ターゲット・プラットフォーム上にビルドする必要があります。パッケージ化に使用するシステムには、パッケージ化ツールに必要なアプリケーション、JDKおよびソフトウェアが含まれている必要があります。
アプリケーションを複数のプラットフォームでパッケージ化するには、各プラットフォームでパッケージ化ツールを実行する必要があります。プラットフォームに複数のフォーマットが必要な場合、フォーマットごとに1回ツールを実行する必要があります。
次のプラットフォームおよびフォーマットが必須のソフトウェアとともにサポートされています:
- 
                        Linux: deb、rpm:- 
                              Red Hat Linuxの場合、rpm-buildパッケージが必要です。 
- 
                              Ubuntu Linuxの場合は、fakerootパッケージが必要です。 
 
- 
                              
- 
                        macOS: dmg内のpkg、appパッケージに署名するように --mac-signオプションを使用してリクエストし、--iconオプションを使用してDMGイメージをカスタマイズする場合は、xcodeコマンドライン・ツールが必要です。
- 
                        Windows: exe、msiWiX 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ランタイム・イメージがパッケージ化ツールに渡されない場合、jpackageはjlinkツールを使用してアプリケーションのランタイムを作成します。パッケージ化ツールで作成されるランタイム・イメージには、デバッグ記号、通常のJDKコマンド、manページおよびsrc.zipファイルは含まれません。
                  
- 
                        
                        JARファイルで構成される非モジュラ・アプリケーションの場合、生成されるランタイム・イメージにはJDKモジュールの同じセットが含まれ、これらのモジュールは通常の javaランチャによって名前のないモジュールのクラスパス・アプリケーションに提供されます。使用可能なサービス・プロバイダは含まれませんが、--jlink-optionsオプションを使用し、--bind-servicesjlinkオプションを渡して、追加することができます。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-servicesjlinkオプションを渡して、追加することができます。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-filesのjlinkオプションを追加します。
                  ツールによって生成されたランタイム・イメージは、ほとんどのアプリケーションで機能します。ただし、必要に応じて、アプリケーションとパッケージ化するためのカスタム・ランタイムを作成できます。