5 イメージおよびランタイムの変更

パッケージ化ツールにより生成されたアプリケーション・イメージおよびJavaランタイムは、ほとんどのアプリケーションで適切に機能します。ただし、カスタム要件がある場合、それに合せてイメージおよびランタイムを変更し、その後、アプリケーションをパッケージ化する際に、変更したバージョンを使用できます。

アプリケーション・イメージの変更

必要に応じて、パッケージ化ツールで作成されるアプリケーション・イメージを変更し、変更したイメージを配布用にパッケージ化できます。

イメージを変更する理由としては、ファイルの追加と削除、リソースの追加またはランタイムの変更が考えられます。イメージを変更する必要がある場合は、パッケージ化ツールを2回実行します。最初に実行するとき、--type app-imageオプションを使用してアプリケーション・イメージのみを作成します:

jpackage --type app-image --name HelloWorld --input helloworld \
   --main-jar HelloWorld.jar

HelloWorldというディレクトリが現在のディレクトリに作成され、アプリケーション・イメージが格納されます。インストール可能なバンドルが作成されていません。アプリケーション・イメージに必要な変更を加えたら、パッケージ化ツールを再度実行して、変更されたイメージでインストール可能なバンドルを作成します:

jpackage --type msi --app-image HelloWorld --name HelloWorld

ノート:

  • アプリケーション・イメージをパッケージ化する場合は、--nameオプションが必要です。

  • --type app-imageでは、--runtime-imageオプションは使用できません。別のランタイムを使用する場合は、変更するアプリケーション・イメージの作成時に渡します。

Javaランタイムの変更

アプリケーションにパッケージ化されているJavaランタイムをさらに制御する場合は、カスタムのランタイムを作成できます。

アプリケーションのカスタムJavaランタイム・イメージを作成するには、アプリケーションをパッケージ化する前にjlinkを実行します。次に--runtime-imageオプションを使用して、作成されたイメージをパッケージ化ツールに渡します。カスタムのランタイム・イメージを使用する理由としては、次のようなものがあります:

  • ランタイムの作成に使用するオプションをより細かく制御します
  • jpackageの実行に使用したバージョンと異なるバージョンのJavaでアプリケーションをパッケージ化します
  • 複数のアプリケーションに同じランタイムを使用します。

たとえば、次のコマンドでは、JavaFX 13モジュールを含むJDK 14ランタイムを作成し、そのランタイムをアプリケーションとパッケージ化します:

jlink --output jdk-14+fx --module path javafx-jmods-13 \
   --add modules javafx.web,javafx.media,javafx.fxml,java.logging

jpackage --name myapp --input lib --main-jar myApp.jar \
   --runtime-image jdk-14+fx

以前のバージョンのJavaランタイムを必要とするアプリケーションをパッケージ化している場合、--runtime-imageオプションを使用します。次のコマンドでは、JDK 11ランタイムが自分のアプリケーションとともにパッケージ化されます:

jpackage --name myapp --input lib --main-jar myApp.jar \
   --runtime-image jdk-11.0.5

以前のバージョンのJDKに基づいたカスタム・ランタイムがアプリケーションで必要な場合は、以前のバージョンを使用してjlinkを実行し、ランタイム・イメージを作成します。次に、現在のJDKを使用してjpackageを実行し、カスタム・ランタイムに渡します。次のコマンドは、JDK 11.0.5を使用してカスタム・ランタイムを作成し、JDK 14を使用してパッケージ化します:

c:\Program Files\Java\jdk-11.0.5\bin\jlink output my-jdk11 \
   --add-modules java.desktop,java.datatransfer 

c:\Program Files\Java\jdk-14\bin\jpackage --name myapp --input lib \
   --main-jar myApp.jar --runtime-image my-jdk11