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コマンド、マニュアル・ページ、src.zipファイルおよびサービス・バインディング(Configurationクラスを参照)は含まれません。
JARファイルで構成される非モジュラ・アプリケーションの場合、生成されるランタイム・イメージにはJDKモジュールの同じセットが含まれ、これらのモジュールは通常のjavaランチャによって名前のないモジュールのクラスパス・アプリケーションに提供されます。次の例では、1つのJARファイルで構成される自己完結型Javaアプリケーションを作成します:
jpackage --name DynamicTreeDemo \
--input . --main-jar DynamicTreeDemo.jar \
--module-path $JAVA_HOME/jmodsモジュラJARファイルおよびJMODファイルで構成されるモジュラ・アプリケーションの場合、生成されるランタイム・イメージには、アプリケーションのメイン・モジュールと、そのすべての依存関係の推移閉包が含まれます。次の例では、1つのモジュールで構成される自己完結型Javaアプリケーションを作成します:
jpackage --name Hello --module-path mods \
--module com.greetings/com.greetings.Mainモジュールを追加するには、--add-modulesオプションを使用します次の例では、java.loggingモジュールを追加します:
jpackage --name DynamicTreeDemo \
--input . --main-jar DynamicTreeDemo.jar \
--module-path $JAVA_HOME/jmods \
--add-modules java.loggingjpackage --name Hello --module-path "mods:$JAVA_HOME/jmods" \
--module com.greetings/com.greetings.Main \
--add-modules java.loggingJDK 25以降では、生成されたランタイム・イメージにサービス・バインディングは含まれません。--jlink-optionsオプションを使用し、--bind-services jlinkオプションを渡して、追加することができます:
jpackage --name DynamicTreeDemo \
--input . --main-jar DynamicTreeDemo.jar \
--jlink-options --bind-servicesjpackage --name Hello --module-path mods \
--module com.greetings/com.greetings.Main \
--jlink-options --bind-servicesノート:
-
--jlink-optionsオプションを指定しない場合、デフォルトでjpackageツールは、--strip-native-commands、--strip-debug、--no-man-pagesおよび--no-header-filesのjlinkオプションを追加します。 -
JDK 25以降では、
jpackageは、作成するランタイム・イメージにサービス・バインディングを含めなくなりました。JDK 25より前では、jpackageにそれらが含まれます。その結果、JDK 25以降でjpackageによって生成されたランタイム・イメージには、以前のJDKリリースと同じモジュール・セットが含まれない場合があります。生成されたランタイム・イメージに以前のJDKリリースと同じモジュール・セットを含めるには、
jpackageが使用するデフォルトのjlinkオプションに加えて、--jlink-optionsオプションを使用し、--bind-servicesjlinkオプションを渡します。jpackage [...] --jlink-options --strip-native-commands --strip-debug \ --no-man-pages --no-header-files --bind-services
ツールによって生成されたランタイム・イメージは、ほとんどのアプリケーションで機能します。ただし、必要に応じて、アプリケーションとパッケージ化するためのカスタム・ランタイムを作成できます。