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
、msi
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ランタイム・イメージがパッケージ化ツールに渡されない場合、jpackage
はjlink
ツールを使用してアプリケーションのランタイムを作成します。パッケージ化ツールで作成されるランタイム・イメージには、デバッグ記号、通常の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-files
のjlink
オプションを追加します。
ツールによって生成されたランタイム・イメージは、ほとんどのアプリケーションで機能します。ただし、必要に応じて、アプリケーションとパッケージ化するためのカスタム・ランタイムを作成できます。