プライマリ・コンテンツに移動
Java Platform, Standard Editionデプロイメント・ガイド
リリース10
E94981-01
目次へ移動
目次

前
次

2 自己完結型アプリケーションのパッケージ化

このトピックでは、自己完結型アプリケーションのパッケージの生成方法について説明します。自己完結型アプリケーションには、JavaやJavaFXアプリケーション、およびアプリケーションの実行に必要なJREが含まれます。自己完結型パッケージは、Linux、macOSおよびWindowsを実行するシステムへの配布用に作成できます。

このトピックには、次の項があります。

はじめに

Javaパッケージ化ツールでは、いくつかの形式の自己完結型アプリケーション・パッケージの組込みサポートが提供されています。基本パッケージは、すべてのアプリケーション・リソースおよびJREを含むハード・ドライブ上の単一のフォルダです。パッケージはそのまま再配布することができ、インストール可能なパッケージ(たとえばEXEやDMG形式)をビルドできます。

プロセスの観点からは、自己完結型アプリケーション・パッケージの作成は、基本的なアプリケーション・パッケージの作成と似ていますが、次の点が異なります。

  • <fx:deploy> Antタスクまたはjavapackager -deployコマンドにnative引数を渡すことで、自己完結型アプリケーション・パッケージを明示的に要求する必要があります。

  • 自己完結型アプリケーション・パッケージは、実行を意図しているオペレーティング・システム上にビルドする必要があります。特定の形式でパッケージをビルドするために、前提条件ツールが使用可能である必要があります。

  • 自己完結型アプリケーション・パッケージは、JDK 7 Update 6以降を使用した場合のみビルドできます。JDK 9のJavaパッケージャは、アプリケーションをJDK 9ランタイム・イメージとパッケージ化します。JDK 8またはJDK 7 JREをアプリケーションとパッケージ化するには、JDK 8 Javaパッケージャを使用します。

基本的な自己完結型アプリケーション・パッケージを作成することは容易ですが、特定の配布方法に最適なユーザー操作性を実現するように自己完結型アプリケーション・パッケージを調整するには、通常、労力と、トピックに関する深い理解が必要です。

自己完結型アプリケーション・パッケージの利点および欠点

自己完結型アプリケーション・パッケージを使用することがアプリケーションのデプロイに最適な方法であるかどうかの判断は、要件に応じて異なります。

自己完結型アプリケーション・パッケージには次の利点があります。

  • ユーザーは、使い慣れたインストーラでアプリケーションをインストールし、通常の方法で起動します。

  • アプリケーションで使用するJREのバージョンを制御します。

  • JREをインストールする必要なしに、アプリケーションを新しいシステムにデプロイできます。

  • ZIPまたはユーザー・レベルのインストーラを使用すると、管理権限がなくてもデプロイメントが行われます。

  • アプリケーションのためにファイルの関連付けを登録できます。

  • セカンダリ・ランチャのサポートにより、アプリケーション・スイートを単一の自己完結型アプリケーション・パッケージにバンドルできます。

自己完結型アプリケーション・パッケージには次の欠点があります。

  • 「ダウンロードして実行」ユーザー操作

    Webデプロイメントとは異なり、ユーザー操作は「Webからアプリケーションを起動」に関するものではありません。「ダウンロード、インストールして実行」プロセスの1つで、ユーザーは、アプリケーションを起動するために追加のステップが必要になることがあります。たとえば、ユーザーは、ブラウザまたはオペレーティング・システムのセキュリティ・ダイアログを受け入れたり、ダウンロード・フォルダからアプリケーション・インストーラを検索および起動したりする必要がある場合があります。

  • ダウンロード・サイズが大きい

    一般に、自己完結型アプリケーション・パッケージのサイズは、JREのプライベート・コピーが含まれているため、スタンドアロン・アプリケーションのサイズより大きくなります。

  • ターゲット・プラットフォーム当たりのパッケージ

    自己完結型アプリケーション・パッケージは、プラットフォーム固有で、ビルドしたシステムと同じシステムにのみ作成できます。Windows、LinuxおよびmacOSで自己完結型アプリケーション・パッケージを配信するには、3つのすべてのプラットフォーム上にプロジェクトをビルドする必要があります。

  • アプリケーションの更新は開発者の担当

    Web配備されたJavaアプリケーションは、アプリケーションの更新が使用可能になるとすぐに、Webからその更新を自動的にダウンロードします。Javaの自動更新メカニズムでは、毎年数回、最新のセキュアなバージョンへのJREの更新を処理します。自己完結型アプリケーションには、自動更新の組込みサポートがありません。

基本

各自己完結型アプリケーション・パッケージには、次のアイテムが含まれています。

  • 一連のJARファイル内のアプリケーション・コード、およびその他のアプリケーション・リソース(データ・ファイル、ネイティブ・ライブラリ)

  • このアプリケーションのみで使用されるJREのコピー

  • アプリケーションのネイティブ・ランチャ。1つのパッケージに対する複数のランチャがサポートされています

  • アイコンなどのメタデータ

複数のパッケージ形式が可能です。パッケージのいくつかのタイプに組込みサポートが提供されます。たとえば、ZIPファイルとしてアプリケーションを配布する場合、フォルダとしてパッケージ化された自己完結型アプリケーションの後処理によって独自のパッケージを構築することもできます。

自己完結型アプリケーション構造

自己完結型アプリケーション・パッケージの基本形式は、図2-1の例などのハード・ドライブ上の単一フォルダです。パッケージのいずれかをインストールすると、結果は同じコンテンツのフォルダとなります。

図2-1 自己完結型アプリケーション・パッケージの例

図2-1の説明が続きます
「図2-1 自己完結型アプリケーション・パッケージの例」の説明

自己完結型アプリケーション・フォルダの内部構造は、プラットフォーム固有で、将来変更される可能性があります。ただし、次のアイテムはすべてのプラットフォームに適用され、変更されない可能性があります。

  • アプリケーション・パッケージは、アプリケーション・ディレクトリ構造を保持してフォルダとして含まれます。

  • JREのコピーは別のフォルダとして含まれ、JREディレクトリ構造は保持されます。

ディレクトリ構造が保持されるため、アプリケーションは、アプリケーションJARまたはjava.homeシステム・プロパティに相対的なパスを使用して外部リソースをロードできます。

注意:

Javaパッケージ化ツールではjlinkツールを使用してアプリケーションのカスタムJREが生成されます。デフォルトで含まれないものが必要な場合、次の後処理ステップとしてコピーできます。インストール可能なパッケージの場合、自己完結型アプリケーション・フォルダへの格納後に実行されるconfigスクリプトからこれを行うことができます。ドロップイン・リソースを使用したパッケージのカスタマイズを参照してください。

基本的なビルド

自己完結型アプリケーションを作成する最も容易な方法は、デプロイメント・タスクを変更することです。実行中のプラットフォームのすべてのタイプの自己完結型アプリケーション・パッケージの作成を要求するには、次の例に示すように、nativeBundles="all"<fx:deploy>タスクに追加します。

<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
           nativeBundles="all"
           outdir="${basedir}/${dist.dir}" outfile="${application.title}">
    <fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
    <fx:resources>
        <fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
    </fx:resources>
    <fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>

作成する正確なパッケージ形式を指定することもできます。値imageを使用して、基本パッケージ(EXEインストーラを要求するにはexe、DMGインストーラを要求するにはdmgなど)を作成します。属性値の完全なリストは、Antタスク・リファレンスの<fx:deploy>エントリのnativeBundles属性を参照してください。

Javaパッケージャ・ツールを使用して、ネイティブ・パッケージを作成することもできます。-nativeオプションを-deployコマンドと一緒に使用して、特定の形式を要求できます。Java Platform, Standard Editionツール・リファレンスjavapackagerコマンドを参照してください。

例2-1は、BrickBreakerアプリケーションに適用可能なすべての自己完結型アプリケーション・パッケージの生成に使用される、-deployコマンドとともに使用する-nativeオプションの使用を示しています。-deployコマンドは入力としてJARファイルが必要であるため、dist/BrickBreaker.jarがすでにビルドされていることを前提としています。

例2-1 自己完結型アプリケーション・パッケージを生成するJavaパッケージャ・コマンド

javapackager -deploy -native -outdir packages -outfile BrickBreaker 
    -srcdir dist -srcfiles BrickBreaker.jar -appclass brickbreaker.Main 
    -name "BrickBreaker" -title "BrickBreaker demo"

ドロップイン・リソースを使用したパッケージのカスタマイズ

パッケージ化ツールでは、アプリケーション・アイコンまたは構成ファイルなどのパッケージを作成するいくつかの組込みリソースを使用します。生成されるパッケージをカスタマイズする1つの方法は、組込みリソースをカスタマイズされたバージョンで置き換えることです。

次のアクションが必要です。

カスタム・リソースの準備

どのリソースが使用されているかを詳細に理解するには、verbose="true"属性を<fx:deploy>に追加するか、-vオプションをjavapackager -deployコマンドに渡すことによって、冗長モードを有効にします。

冗長モードには、次のアクションが含まれます。

  • 次のアイテムが印刷されます。

    • 生成しているパッケージに使用される構成リソースのリスト

    • 各リソースの役割

    • 目的のカスタム・リソース名

  • 自己完結型パッケージの作成に使用される構成ファイルおよびリソースのコピーは、一時フォルダに保存されます。これらのファイルをカスタマイズの開始点として使用できます。

次の例は、重要な部分を太字にして、冗長モードのサンプル出力を示しています。

Using base JDK at: /Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk
  Using default package resource [Bundle config file] (add
    package/macosx/Info.plist to the class path to customize)
  Using default package resource [icon] (add package/macosx/DemoApp.icns
      to the class path to customize)
Creating app bundle: /tmp/test/TestPackage/bundles/DemoApp.app
Config files are saved to /var/folders/rd/vg2ywnnx3qj081sc5pn9_
    vqr0000gn/T/build7039970456896502625.fxbundler/macosx. Use them 
    to customize package.

構成ファイルのコピーを取得して、必要に合せて調整できるようになります。たとえば、構成ファイルInfo.plistを取得し、ローカライズされたパッケージ名を追加できます。

注意:

カスタマイズを行った後、冗長モードを無効にするか、サンプル構成ファイルを削除するカスタム・クリーンアップ・アクションを追加することをお薦めします。

組込みリソースの置換

パッケージ化ツールは、組込みリソースに戻す前にクラス・パスでカスタマイズされたリソースを検索します。Javaパッケージャには、デフォルトでクラス・パスに追加された"." (現在の作業ディレクトリ)があります。そのため、アプリケーション・アイコンを置き換えるには、javapackagerが実行されるディレクトリ(通常はルート・プロジェクト・ディレクトリ)の./package/macosx/DemoApp.icnsにカスタム・アイコンをコピーします。

タスク定義がロードされると、Java Antタスクのクラス・パスが定義されます。パスant-javafx.jarの前のルックアップに追加のパスを追加する必要があります。

例2-2に、カスタム・リソースのパスに"."を追加する方法を示します。

カスタマイズ化されたリソースを指定した後、冗長ビルド出力は、リソースが使用されていることをレポートします。たとえば、アプリケーションにカスタム・アイコンを追加した場合、例2-3に示すように、冗長出力はその追加内容をレポートします。

例2-2 JavaFX Antタスクのリソースのカスタマイズの有効化

<fx:bundleArgument arg="dropinResourcesRoot" value="."/>

例2-3 カスタマイズされたアイコン・リソースの追加後の冗長出力

Using base JDK at: /Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk
  Using default package resource [Bundle config file] (add
      package/macosx/Info.plist to the class path to customize)
Using custom package resource [icon] (loaded from
    package/macosx/DemoApp.icns on class path)
Creating app bundle: /tmp/test/TestPackage/bundles/DemoApp.app

カスタマイズのオプション

自己完結型アプリケーション・パッケージをカスタマイズするには、既存のJavaFX Ant要素の多くが使用されます。異なるパッケージには異なるパラメータ・セットが必要で、同じ要素が異なる役割を持つ場合があります。表2-1に、カスタマイズ・オプションおよび関連する属性のいくつかを紹介します。要素およびその属性の詳細な説明は、JavaFX Antヘルパー・パラメータ・リファレンスを参照してください。

表2-1 Ant要素および属性を使用したカスタマイズ・オプション

要素 説明

<fx:application>

アプリケーション記述子。これを使用して、名前やバージョンなど、アプリケーション属性を設定します。

<fx:preferences>

アプリケーションのデプロイメント・プリファレンス。これを使用して、ショートカットの要求やシステム・アプリケーション・メニュー内のエントリなど、インストール・オプションを設定します。

<fx:fileset>

標準的なAnt FileSetタイプの拡張子。これを使用して、指定されたリソースのタイプを識別します。

<fx:info>

ユーザーへのアプリケーションの説明。これを使用して、タイトルやアプリケーションのベンダーなど、システム・ダイアログ・ボックスに表示されるアプリケーション情報を定義します。

<fx:argument>

起動時にアプリケーションに渡される引数。

<fx:association>

アプリケーションに関連付けるファイルのタイプ。

<fx:jvmarg>

JVMに渡され、アプリケーションの実行に使用されるJVM引数(たとえば大きいヒープ・サイズなど)。

<fx:jvmUserArg>

JVMに渡され、アプリケーションの実行に使用される、ユーザー変更可能なJVM引数。

<fx:property>

アプリケーションを実行するJVMで設定されるプロパティ。

<fx:runtime>

アプリケーション用に生成されるJavaランタイムのカスタマイズ。これを使用して、ランタイムへのモジュールの追加、モジュールの場所の指定、およびコマンド行ツールの包含を行います。

基本パッケージのプラットフォーム固有のカスタマイズ

自己完結型アプリケーション・パッケージの基本形式の作成およびカスタマイズは非常に簡単なプロセスですが、次の点に注意してください。

  • 異なるプラットフォームには異なるアイコン・タイプが必要です。

    たとえば、Windowsでは.ico形式が必要で、Linuxでは.png形式およびmacOSでは.icns形式が必要です。Linuxではランチャにアイコンは埋め込まれておらず、かわりに.desktopファイルがアイコンを参照します。

  • JavaFXアプリケーションでは、アイコンをアプリケーション・ステージに追加して、アイコンが実行時に設定されていることを確認します。たとえば、JavaFXアプリケーションのstart()メソッドに次のコードを追加します。

    stage.getIcons().add(new
         Image(this.getClass().getResourceAsStream("app.png")));
    
  • アプリケーションを配布する場合、出力フォルダのファイルに署名します。

    たとえば、Windowsでは、signtool.exeを使用して起動ツールの実行ファイルに署名できます。

macOS

macOSで生成されるパッケージは"application bundle"です。

いくつかの構成パラメータがアプリケーション・バンドルのInfo.plistファイルに配置され、次のルールに従う必要があります。

  • アプリケーションID (IDが指定されていない場合はメイン・クラス名)はCFBundleIdentifierとして使用されます。

  • アプリケーション・バージョンはCFBundleShortVersionStringとして使用されます。

macOSのGatekeeperにより、このコードがオブジェクティブCまたはJavaのどちらで実装されているかに関係なく、デフォルトで信頼されていないコードの実行が阻止されます。

ユーザーは実行するアプリケーションを手動で有効にできますが、これは完璧なユーザー操作ではありません。最適なユーザー操作を得るには、AppleからDeveloper ID証明書を取得します。Macバンドラでは、証明書を使用して.appフォルダに署名します。ローカル・ユーザー情報が証明書の名前と異なる場合、例2-4に示すように、バンドル引数mac.signing-key-user-nameを設定する必要がある可能性があります。Apple DeveloperサイトのDeveloper ID and Gatekeeperを参照してください。

例2-4 mac.signing-key-user-nameの使用例

// Using javapackager tool
 javapackager ... -Bmac.signing-key-user-name="Jane Appleseed"

// Using Ant tasks
   <fx:deploy>
      //...
<fx:bundleArgument arg="mac.signing-key-user-name" value="Jane Appleseed"/>
      //...
    </fx:deploy>

自己完結型アプリケーションへの引数の受渡し

コマンドラインから自己完結型アプリケーションが起動される際に、アプリケーションに引数を渡すことができます。引数が指定されていない場合は、アプリケーションに渡す引数のセットを定義することもできます。デフォルトの引数を定義するには、javapackager deployコマンドで-argumentオプションを使用するか、アプリケーション・パッケージの作成時にAntタスクで<fx:argument>要素を使用します。コマンドラインから入力された引数は、デフォルトの引数に優先されます。アプリケーションがランチャ・アイコンから起動される場合、デフォルトの引数が使用されます。

ファイルと自己完結型アプリケーションの関連付け

アプリケーションのファイルの関連付けを登録するように自己完結型アプリケーションのインストーラを設定できます。Antタスクで<fx:association>要素を使用して、アプリケーションによって処理できるファイルを識別します。ファイルの関連付けは、ファイル拡張子またはMIMEタイプに基づきます。

次の例では、アプリケーションをMIMEタイプがapplication/x-vnd.MyAppFileのファイルに関連付けます。

<fx:info title="Association example">
  <fx:association mimetype="application/x-vnd.MyAppFile" description="Sample Test Files">
  </fx:association>
</fx:info>

複数のエントリ・ポイントのサポート

自己完結型アプリケーションのパッケージを構築して、複数のエントリ・ポイントを持つ製品スイートをサポートできます。各エントリ・ポイントには独自のショートカットまたはアイコンがあります。<fx:application>要素のmainClass属性では、プライマリ・エントリ・ポイントを識別します。<fx:deploy>タスクで<fx:secondaryLauncher>要素を使用して、各セカンダリ・エントリ・ポイントを定義します。

注意:

複数のエントリ・ポイントは、WindowsおよびLinuxアプリケーションに対してのみサポートされます。

次の例では、WindowsのTestSuiteアプリケーションのエントリ・ポイントを定義します。

<fx:deploy outdir="test/apps" nativeBundles="image">
    <fx:application name="TestSuite Sample"
                    mainClass="samples.TestSuite"/>

    <fx:info title="Test Suite"/>

    <fx:secondaryLauncher
        mainClass="samples.TestSuite"
        name="Suite Applications"/>
        shortcut="true"/>
 
    <fx:secondaryLauncher name="Editor">
        <fx:bundleArgument arg="icon" value="../resources/editor.ico"/>
    </fx:secondaryLauncher>
 
    <fx:secondaryLauncher name="Spreadsheet">
        <fx:bundleArgument arg="icon" value="../resources/spreadsheet.ico"/>
    </fx:secondaryLauncher>
</fx:deploy>

JREのカスタマイズ

Javaパッケージ化ツールではjlinkツールを使用して自己完結型アプリケーションのランタイムが生成されます。コマンド行ツール、および必要に応じて追加モジュールを追加します。

デフォルトでは、java.exeなどのコマンド行ツールは、自己完結型アプリケーション・パッケージにバンドルされているJREから削除されます。生成されたJREでこれらのツールを保持するには、<fx:runtime>要素のstrip-native-commands属性をfalseに設定します。

JREのサイズを最小限にするには、jlinkツールを使用して、アプリケーションの実行に必要なパッケージのみを含むカスタム・ランタイムを生成します。追加モジュールが必要な場合は、<fx:add-modules>要素を使用してそのモジュールをランタイムに追加します。複数のモジュールを追加するには、単一の<fx:add-modules>要素をカンマ区切りのモジュールのリストとともに使用するか、モジュールごとに別個の<fx:add-modules>要素を使用します。

次の例にはコマンド行ツールが含まれ、jdk.packager.servicesおよびjavafx.controlsからモジュールが追加されます。

<fx:runtime strip-native-commands="false">
  <fx:add-modules value="jdk.packager.services,javafx.controls"/>
</fx:runtime>

モジュラ・アプリケーションのパッケージ化

Javaパッケージャ・ツールを使用して、モジュラ・アプリケーションおよび非モジュラ・アプリケーションをパッケージ化します。

モジュラ・アプリケーションは自己完結型アプリケーションとしてパッケージ化できます。それらは、Java Web Startアプリケーションとしてはパッケージ化できません。モジュラ・アプリケーションのメイン・モジュールを識別するには、<fx:secondaryLauncher>要素のmodule属性を設定します。

次の例では、HelloWorldModularというアプリケーションのメイン・モジュールを識別します。

<fx:secondaryLauncher name="HelloWorldModular"
    module="hello.world"
    mainClass="com.sample.app.HelloWorld">
</fx:secondaryLauncher>

インストール可能なパッケージ

配布を簡略化するために、自己完結型アプリケーションをプラットフォーム固有のインストール可能なパッケージにラップすることができます。サード・パーティ製ツールの可用性に応じて、Javaパッケージ化ツールでは、いくつかの形式のインストール可能なパッケージの組込みサポートが提供されています。

この章の他の項で説明されているように、インストール・プロセスのユーザー操作の調節は、特定のインストーラ・テクノロジに固有です。ただし、必要なインストーラのタイプを決定する必要があります。その決定に役立つ考慮事項は次のとおりです。

  • システム全体のインストールとユーザーごとのインストールのどちらですか。

    システム全体のインストールの結果、パッケージが共有の場所にインストールされ、システム上のどのユーザーも使用できるようになります。通常は管理権限が必要で、インストール・プロセス中は、高いインストーラ権限を承認するOSプロンプトなど、追加のステップが必要になると考えられます。

    ユーザーごとのインストールでは、パッケージをプライベート・ユーザー・ディレクトリにコピーし、管理権限は必要ありません。このタイプのインストールでは、できるだけ少ないダイアログを表示することができ、ユーザーに管理権限がなくてもプログラムを実行できます。

    ユーザー・レベルまたはシステム・レベルのインストール可能なパッケージが要求されるたびに、ビルド手順自体には管理権限は必要ありません。

  • クリックスルー・ライセンスが必要ですか。

    一部のインストール可能なパッケージでは、インストールの開始前にライセンス・テキストの表示をサポートしています。インストール・プロセスは、ユーザーがライセンスを受け入れた後にのみ開始します。

  • どのメニューとデスクトップの統合が必要ですか。

    ユーザーは、アプリケーションを容易に起動できる必要があります。そのため、デスクトップのショートカットを配置したり、メニュー内のアプリケーションのリストにアプリケーションを追加することが必要です。

現在の実装には、簡略化するための多くの前提があります。たとえば、インストーラは、パッケージをインストールする場所を選択するようユーザーに要求することはありません。開発者も、インストール場所の制御は限られており、システム全体またはユーザーごとのインストールのみ指定できます。

デフォルトの前提ではニーズを満たさない場合、構成ファイル・テンプレートを調整する(ドロップイン・リソースを使用したパッケージのカスタマイズを参照)か、基本的な自己完結型アプリケーションをパッケージ化してからそれをインストール可能なパッケージに自分でラップすることにより、詳細なカスタマイズが可能になります。

インストール可能なパッケージのタイプ

ターゲット・オペレーティング・システムおよび使用可能なパッケージ化ツールに基づいて、自己完結型アプリケーションのインストール可能なパッケージを作成します。

次の表に、サポートされているインストール可能なパッケージ形式およびその作成に必要なツールを示します。

表2-2 インストール可能なパッケージ形式およびツール前提条件

パッケージ形式 インストールの場所(デフォルト・モードは太字) クリックスルー・ライセンス 前提条件

EXE

ユーザーごと: %LOCALAPPDATA%

システム: %ProgramFiles%

あり(オプション)

  • Windows

  • Inno Setup 5以降

MSI

ユーザーごと: %LOCALAPPDATA%

システム: %ProgramFiles%

特別なサポートはなし

  • Windows

  • WiX 3.0以降

DMG

ユーザーごと: ユーザーのデスクトップ・フォルダ

システム: /Applications

あり(オプション)

  • macOS

PKG

ユーザーごと: ユーザーのデスクトップ・フォルダ

システム: /Applications

あり(オプション)

  • macOS

RPM

ユーザーごと: サポートなし

システム: /opt

特別なサポートはなし

  • Linux

  • RPMBuild

DEB

ユーザーごと: サポートなし

システム: /opt

特別なサポートはなし

  • Linux

  • Debianパッケージ化ツール

EXEパッケージ

EXEパッケージを生成するには、Inno Setup 5以降をインストールし、PATHで使用可能にする必要があります。使用可能であることを検証するには、ビルドを起動するコマンド行またはビルド・スクリプトからiscc.exeの実行を試行します。

デフォルトでは、生成されたパッケージには次の特性があります。

  • 管理権限は必要ありません。

  • 最少のダイアログ数になるよう最適化されます。

  • プログラム・メニューまたはデスクトップ・ショートカット、あるいはその両方から参照されます。

  • インストールの終わりにアプリケーションを起動します。

図2-2は、Windows上にインストール中の自己完結型JavaFXアプリケーションの一般的なダイアログ・ボックスを示しています。

図2-2 Windowsの自己完結型JavaFXアプリケーションのインストール・ダイアログ

図2-2の説明が続きます
「図2-2 Windowsの自己完結型JavaFXアプリケーションのインストール・ダイアログ」の説明

カスタマイズのヒント:

  • システム全体のインストールを選択した場合、ユーザーは管理権限を持っている必要があり、インストールの終わりにアプリケーションは起動しません。

  • クリックスルー・ライセンスはサポートされています。.rtfファイルが必要です。

  • インストール・ダイアログに表示されるイメージを、アプリケーション・アイコンとは異なるものにできます。

    現在のバージョンのInno Setupでは、イメージが55x58ピクセルの最大サイズのビットマップ・ファイルであることを想定しています。

  • JavaFXアプリケーションでは、アイコンをアプリケーション・ステージに追加して、アイコンが実行時に設定されていることを確認できます。

  • 生成される.exeパッケージに署名できます。

    信頼できる認証局(TSA)から証明書を取得してから、Windowsのsigntool.exeユーティリティを使用してコードに署名する必要があります。

  • Windowsスクリプト・ファイルを使用して、起動ツール実行可能ファイルに署名するためなど、.exeファイルに自己完結型アプリケーション・フォルダをラップする前に、微調整できます。

カスタム・イメージの追加およびWindowsスクリプト・ファイルの指定の技術は、ドロップイン・リソースを使用したパッケージのカスタマイズで説明されています。アイコンをJavaFXアプリケーションのアプリケーション・ステージに追加するには、基本パッケージのプラットフォーム固有のカスタマイズを参照してください。

注意:

生成されたパッケージがインストールされたアプリケーションのリストに表示されている間は、Windowsインストーラ(MSI)テクノロジは使用されず、GUIDを使用する必要はありません。詳細は、Inno SetupのFAQを参照してください。

MSIパッケージ

Windows Installer XML (WiX)ツールセット(WiXとも呼ばれる)を使用して、MSIパッケージが生成されます。WiX 3.8以降が必要で、PATHで使用できる必要があります。検証するには、ビルドを起動するコマンド行またはビルド・スクリプトからcandle /?の実行を試行します。

デフォルトでは、生成されたMSIパッケージには次の特性があります。

  • エンタープライズ・デプロイメント・ツールを使用したデプロイメント用に最適化されます。

  • システム全体の場所にインストールします。

  • クリックスルーUIがなく、進捗ダイアログのみが表示されます。

  • プログラム・メニューまたはデスクトップ・ショートカット、あるいはその両方から参照されます。

  • インストール・プロセス以外で作成されても、インストール・フォルダのすべてのファイルを削除します。(WiX 3.5以降が必要です。)

  • アプリケーション識別子のUpgradeCodeとしての使用を試行します。

    アプリケーション識別子が有効なGUIDではない場合、UpgradeCodeのランダムなGUIDが生成されます。

  • ProductCodeをランダムに生成します。

固定製品コードを使用したり、MSIパッケージにカスタムUIを追加するには、ドロップイン・リソースを使用したパッケージのカスタマイズで説明されているように、Javaパッケージャで使用されるWiXテンプレート・ファイルをカスタマイズします。カスタムUIについては、WiXドキュメントも参照してください。

ネットワーク上でMSIパッケージを配布する場合、最適なユーザー操作のためにこれに署名します。

起動ツール実行可能ファイルに署名するためなど、.msiファイルに自己完結型アプリケーション・フォルダをラップする前に、微調整することもできます。

DMGパッケージ

デフォルトでは、DMGパッケージは単純なドラッグ・アンド・ドロップのインストール操作を提供しています。図2-3は、インストール中のデフォルト動作の例を示しています。

図2-3 macOSのデフォルト・インストーラの例

図2-3の説明が続きます
「図2-3 macOSのデフォルト・インストーラの例」の説明

インストール・ウィンドウの外観をカスタマイズするために、カスタム・バックグラウンド・イメージを指定できます。

バックグラウンド・イメージに異なるディメンションがあるか、アイコンを別に配置する必要がある場合、インストール・ビュー内の要素のサイズおよび位置を変更するために使用されるDMG設定スクリプトをカスタマイズする必要もあります。ドロップイン・リソースを使用したパッケージのカスタマイズを参照してください。

図2-4 macOSのインストール可能なパッケージのカスタマイズされた外観の例

図2-4の説明が続きます
「図2-4 macOSのインストール可能なパッケージのカスタマイズされた外観の例」の説明

自己完結型アプリケーション・フォルダをラップする前に微調整するには、アプリケーション・フォルダが移入された後で実行する独自のbashスクリプトを指定します。そのようなアクションのスクリプトを、パッケージへのローカリゼーション・ファイルの追加として使用できます。図2-4は、調整されたアプリケーション・インストーラの例を示しています。

Gatekeeperフレンドリなパッケージを作成するには、DMGパッケージのアプリケーションに署名する必要があります。DMGファイル自体には署名する必要はありません。Macバンドラはアプリケーションの署名を処理します。ローカル・ユーザー情報が証明書の名前と異なる場合、例2-4に示すように、バンドル引数mac.signing-key-user-nameを設定する必要がある可能性があります。

アプリケーションに手動で署名するために、macOSで説明されている技術を使用して、アプリケーション・バンドルが移入された後で実行する構成スクリプトを指定できます。サンプルDemoAppの場合、構成スクリプトはpackage/macosx/DemoApp-post-image.shにあり、次の例に示すようなコンテンツがあります。

echo "Signing application bundle"
#Move to the folder containing application bundle
cd ../images/dmg.image
#do sign
codesign -s "Developer ID Application" *.app
echo "Done with signing"

DMGインストーラは、テキスト形式で提供されたクリックスルー・ライセンスもサポートしています。リッチ・テキスト形式の使用が必要な場合、license.plistファイルを外部で準備し、ドロップイン・リソースを使用したパッケージのカスタマイズで説明されている技術を使用してパッケージに追加します。

DMGパッケージを作成するには、サード・パーティ製ツールは必要ありません。

Linuxパッケージ

Linuxのインストール・パッケージの生成では、インストール・パッケージのビルドに必要なネイティブ・ツールがインストールされていることを前提としています。RPMパッケージの場合、通常、これはRPMBuildパッケージおよびその依存を意味します。DEBパッケージの場合、dpkg-debおよび依存が必要です。

パッケージをビルドするには、管理権限は必要ありません。

デフォルトでは、生成されたパッケージには次の特性があります。

  • アプリケーションを/optディレクトリにインストールします。

  • ショートカットをアプリケーション・メニューに追加します。

  • Linuxパッケージの通常の動作であるインストール用のUIはありません。

カスタマイズのヒント:

  • アプリケーション・メニューの特定のカテゴリにアプリケーションを配置するには、<fx:info>category属性を使用します。

    デスクトップ・メニューの仕様を参照し、カテゴリ名のリストはウィンドウ・マネージャのドキュメントを参照してください。

  • アイコンは.pngファイルである必要があります。

  • ドロップイン・リソースを使用したパッケージのカスタマイズで説明されている技術を使用してビルド・テンプレート・ファイルを調整することによって、高度なカスタマイズが可能です。

    使用可能なオプションの詳細は、DEB/RPMのパッケージ化ガイドを参照してください。

デプロイメント・シナリオの処理

次の特性を持つJavaFXアプリケーションがあるシナリオを考えてみます。

  • サード・パーティ製ライブラリをいくつか使用します。

  • サード・パーティ製ライブラリの1つはJNIを使用し、System.loadLibrary()を使用してプラットフォーム固有のネイティブ・ライブラリをロードします。

  • 大きい1GBのヒープが必要です。

インストールに管理権限が必要ない自己完結型アプリケーションとして、このアプリケーションをパッケージ化する必要があります。

アプリケーションがスタンドアロン・アプリケーションとして正しく動作すること、メインJARファイルがdistフォルダにビルドされること(<fx:jar>を使用)、およびサード・パーティ製ライブラリがdist/libディレクトリにコピーされることを前提としています。

自己完結型アプリケーション・パッケージを構築する方法の1つが例2-5に示され、次のアクションで構成されます。

  • すべてのアプリケーションJARファイルを含めます。

  • 現在のプラットフォームに適用可能なネイティブ・ライブラリを、タイプ・データのリソースとして追加します。

    ファイルセットのベース・ディレクトリがライブラリを含むフォルダに設定されていることを確認します。これにより、ライブラリが最上位のアプリケーション・フォルダに確実にコピーされます。

  • <fx:preferences install="false"/>を使用して、ユーザー・レベルのインストールを要求します。

最上位のアプリケーション・フォルダがライブラリ検索パスに追加されるため、System.loadLibrary()を使用できます。

例2-5は、<fx:deploy>タスクの例を示しています。

例2-5 <fx:deploy>タスクの例

<fx:deploy nativeBundles="all" width="600" height="400"
           outdir="${basedir}/dist" outfile="NativeLibDemo">
    <fx:application name="NativeLib Demo" mainClass="${javafx.main.class}"/>
 
    <fx:resources>
        <!-- include application jars -->
        <fx:fileset dir="dist" includes="*.jar"/>       
        <fx:fileset dir="dist" includes="lib/*.jar"/>

        <!-- native libs for self-contained application -->
        <!-- assume they are stored as
                 native/windows/x86/JNativeHook.dll
                 native/linux/x86_64/libJNativeHook.so
                 .... -->
        <!-- ensure libraries are included as top level elements
                to get them on java.library.path -->
        <fx:fileset dir="${basedir}/native/${os.name}/${os.arch}"
                    type="data">
            <include name="*.dll"/>
            <include name="*.jnilib"/>
            <include name="*.so"/>
        </fx:fileset>
    </fx:resources>
 
    <!-- Custom JVM setup for application -->
    <fx:platform>
        <fx:jvmarg value="-Xmx1024m"/>
        <fx:jvmarg value="-verbose:jni"/>
        <property name="my.property" value="something"/>
    </fx:platform>
 
    <!-- request user level installation -->
    <fx:preferences install="false"/>
</fx:deploy>