Java 開発者は、jar を配布したりクラスパスを構成したりするのではなく、ネイティブ プラットフォームに直接インストールできるアプリケーションを構築したいと長い間考えてきました。jpackage を使用すると、特定のプラットフォームのユーザーが使用する方法で Java アプリケーションをインストール/アンインストールでき、Windows では msi 形式と exe 形式、MacOS では pkg と dmg、Linux では deb と rpm をサポートします。エンドユーザーは、jpackage で構築されたアプリケーションをインストールするときに、違いに気付かないはずです。
Java アプリケーションの配布は常に厄介な問題でした。これは、Java アプリケーションの実行には仮想マシンのサポートが必要であるためです。Java アプリケーションによってパッケージ化された JAR ファイルだけでは十分ではなく、ターゲット マシンには、一致するバージョンの JDK または JRE もインストールする必要があります。クラウド ネイティブおよびコンテナ化テクノロジの人気により、Java アプリケーションをコンテナ イメージの形式でパッケージ化して配布できるため、配布の困難さが大幅に軽減されます。ただし、クライアントのマシンに直接インストールする必要がある Java アプリケーションがまだかなりの数あります。
通常の解決策は、install4j などのサードパーティのインストール ツールを使用して、アプリケーションのインストール パッケージを作成することです。インストール パッケージは、アプリケーションとそれが依存する Java ランタイム環境をパッケージ化する役割を果たします。ツールのインストールに関する問題は、ツールが面倒で、多くの場合、料金がかかることです。多くの場合、単に Java プログラムを実行するだけで済みます。たとえば、顧客のマシン上で Java で書かれたデータ移行ツール、quarkus などのサードパーティ フレームワークを実行します。
jpackage の出力は、必要なすべての Java 依存関係を含む Java アプリケーション イメージです。イメージはファイル システム上の単一のディレクトリに保存され、次のものを含めることができます。
- ネイティブアプリケーションランチャー
- Java ランタイム イメージ (アプリケーションをモジュール化する場合のアプリケーション モジュールを含む)
- jar、ico、png などのアプリケーション リソース
- plist、cfg、プロパティなどの設定ファイル
jpackage ツールは、新しい jdk.jpackage モジュールの JDK 13 の一部となる予定です。
jpackage ツールには 2 つのモードがあります。
- create-image - プラットフォーム固有のアプリケーション イメージを生成します
- create-installer - アプリケーションのプラットフォーム固有のインストーラーを生成します
モジュール型アプリケーション イメージを生成するには、次の手順を実行します。
jpackage create-image --output 出力ディレクトリ --name AppName \ --main-クラス パッケージ.ClassName -module moduleName -p modulePath jpackage create-image --o Outputdir -n AppName \ -cパッケージ.クラス名 -m モジュール名 -p モジュールパス |
非モジュール型アプリケーション イメージを生成するには、次の手順を実行します。
jpackage create-image --input inputdir --output 出力ディレクトリ \ --name AppName --main-クラス パッケージ.ClassName --main-jar MyJar.jar jpackage create-image -i 入力ディレクトリ -o 出力ディレクトリ -n アプリ名 \ -cパッケージ.ClassName -j MyJar.jar |
アプリケーション インストーラーを生成するには:
jpackage create-installer -i 入力ディレクトリ -o 出力ディレクトリ \ -n -cパッケージ.ClassName -j MyJar.jar jpackage create-installer -o Outputdir -n \ --アプリイメージ |
Java ランタイム インストーラーを生成するには、次の手順を実行します。
jpackage create-installer --runtime-installer\ --name --output 出力ディレクトリ jpackage create-installer --runtime-installer \ -n -o 出力ディレクトリ --ランタイムイメージ |
すべてのプラットフォームで利用できるいくつかのオプション:
- --main-jar -j <main jar file> - アプリケーションのメイン JAR; メイン クラスが含まれます
- --main-class -c <class name> - 実行するアプリケーションのメインクラスの修飾名
- --installer-type <type> - イメージ作成モードで作成されたインストーラーのタイプ (msi、exe、rpm、deb、dmg、pkg、pkg-app-store)
- --runtime-installer - Java ランタイム用のプラットフォーム固有のインストーラーを生成します。
- --jvm-args <java vm argument> - 仮想マシンに渡される Java 引数
- --install-dir <ファイルへのパス> - アプリケーションのインストール ディレクトリへの絶対パス
特定のオプションは Mac OS X プラットフォームでのみ使用できます。
- --mac-sign - パッケージの署名を要求します
- --mac-bundle-name <name string> - メニュー バーに表示されるアプリケーションの名前
- --mac-app-store-category <カテゴリ文字列> - Mac App Store 类别
- --mac-signing-keychain <path to file> - 使用するキーチェーンへのパス
jpackage に関するその他の興味深い点は次のとおりです。
- Windows または MacOS アプリ ストアへの送信に適した Java アプリケーションのパッケージ化のサポート
- 関連付けられたサフィックスを持つファイルを開いたときにアプリケーションを起動するようにファイルの関連付けを設定する場合のネイティブ統合
- Windows の [スタート] メニュー項目など、プラットフォーム固有のメニュー グループを起動できるネイティブ統合
- クロスコンパイルはサポートされていません。Windows パッケージは Windows 上で jpackage を実行して作成する必要があります。
- 個別のライセンス ファイルなど、JMOD ファイルで既に提供されているものを超える合法的なファイルはサポートされません。
- ネイティブのスプラッシュ画面をサポートしていません
- 自動更新メカニズムをサポートしていません
- このツールは Solaris プラットフォームでは使用できません
- Java Web Start アプリケーションと JavaFX 固有の機能はサポートされていません
- このツールには GUI はなく、コマンド ライン インターフェイス (CLI) のみが提供されます。