3 アプリケーション要件のサポート

パッケージ化ツールでは、デフォルト引数、JVMオプション、ファイル・アソシエーション、複数のランチャおよび署名など、アプリケーションの要件をサポートしています。

デフォルトのコマンドライン引数の設定

アプリケーションがコマンドライン引数を受け入れる場合、--argumentsオプションを使用してデフォルト値を定義します。ユーザーは、アプリケーションを起動するときに、これらの値をオーバーライドできます。

デフォルトのコマンドライン引数でアプリケーションをパッケージ化した場合、ユーザーが引数を指定せずにアプリケーションを起動すると、これらの値はメイン・クラスに渡されます。jpackageによって生成されたアプリケーション・イメージの/appディレクトリにあるapp-name.cfgファイルの[ArgOptions]セクションには、定義されているデフォルトの引数が示されます。このファイルをチェックして、値が正しく定義されていることを確認できます。

次の例は、デフォルト引数の設定方法を示しています:

  • 単一の引数のデフォルト値を設定します。

    次のコマンドは、MyAppアプリケーションの単一の引数に対する値を定義します。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments arg1 
  • 複数の引数のデフォルト値を設定します。

    スペースを使用して引数を区切り、文字列全体を引用符で囲むか、--argumentsオプションの複数のインスタンスを使用します。次のコマンドは、MyAppアプリケーションのデフォルトのコマンドライン引数を3つ定義する別の方法を示しています。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments "arg1 arg2 arg3" 
    
    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments arg1 --arguments "arg2 arg3" 
    
    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments arg1 --arguments arg2 --arguments arg3 
  • スペースを含むデフォルト値を設定します。

    引数にスペースが含まれる場合は、jpackageによってスペースが値の一部として処理され、値の間のデリミタとして処理されないように、2組の引用符が必要です。引数を一重引用符で囲むか、エスケープ文字を前に付けて二重引用符で囲んで、引用符で囲んだ文字列を引用符で囲みます。次のコマンドは、スペースを含む2つの引数を定義する別の方法を示しています。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments "\"String 1\" \"String 2\"" 
    
    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments "\"String 1\"" --arguments "\"String 2\"" 
    
    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --arguments "'String 1'" --arguments "'String 2'" 

JVMオプションの設定

アプリケーションの起動時にJVMにオプションが渡されるようにする場合は、アプリケーションをパッケージ化するときに--java-optionsオプションを使用します。ユーザーは、アプリケーションにJVMオプションを指定できません。

必要に応じてアプリケーションを実行するためのJVMを設定するには、ユーザーがアプリケーションを起動するときに渡すJVMオプションを定義します。$APPDIRマクロを使用して、アプリケーションに含まれるリソースを参照します。アプリケーションをパッケージ化するときに、リソース・ファイルは入力ディレクトリに存在している必要があります。

jpackageによって生成されたアプリケーション・イメージの/appディレクトリにあるapp-name.cfgファイルの[JavaOptions]セクションには、定義されているデフォルトの引数が示されます。このファイルをチェックして、値が正しく定義されていることを確認できます。

次の例では、JVMオプションをアプリケーションに渡す方法をいくつか示します:

  • 単一のJVMオプションを設定します。

    次のコマンドは、MyAppアプリケーションのヒープの初期サイズを2メガバイトに設定します。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options Xms2m 
  • 複数のJVMオプションを設定します。

    複数のJVMオプションを指定するには、スペースを使用して引数を区切り、文字列全体を引用符で囲むか、--jvm-optionsオプションの複数のインスタンスを使用します。次のコマンドは、初期サイズおよびヒープの最大サイズを設定する別の方法を示しています。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options "Xms2m Xmx10m"
    
    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options Xms2m  --java-options Xmx10m
  • スペースを含むJVMオプションを設定します。

    JVMオプションにスペースが含まれる場合は、jpackageによってスペースがオプションの一部として処理され、オプションの間のデリミタとして処理されないように、2組の引用符が必要です。引数を一重引用符で囲むか、エスケープ文字を前に付けて二重引用符で囲んで、引用符で囲んだ文字列を引用符で囲みます。次のコマンドは、スペースを含む2つのオプションを定義する別の方法を示しています。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options "\"-DAppOption=text string\""
    
    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options "'-DAppOption=text string'"
  • 引用符を含むJVMオプションを設定します。

    JVMオプションに引用符が含まれている場合は、引用符にエスケープ文字を使用する必要があります。次のコマンドでは、JVMオプション-XX:OnError="userdump.exe %p"jpackageに渡されます。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options "-XX:OnError=\"\\\"userdump.exe %p\\\"\""
  • JVMオプションで$APPDIRマクロを使用します。

    アプリケーション・ディレクトリのイメージmyAppSplash.jpgをアプリケーションのスプラッシュ画面として使用するには、次の例に示すように$APPDIRマクロを使用します。アプリケーションをパッケージ化するときに、イメージ・ファイルは入力ディレクトリに存在している必要があります。一部のシェルでは、ドル記号をエスケープする必要があります(\$APPDIRなど)。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --java-options "-splash:\$APPDIR/myAppSplash.jpg"

クラス・パスおよびモジュール・パスの設定

デフォルトでは、jpackageツールにより、--inputオプションで指定された各JARファイルへのパスを含むデフォルトのクラス・パスが生成されます。ただし、--java-optionsオプションを介して-cp-classpath、または -Djava.class.pathオプションで指定したクラス・パスは、デフォルトのクラス・パスをオーバーライドします。

--java-optionsを使用してクラス・パスを指定する場合は、各入力JARファイルへのパスを含めてください。たとえば、アプリケーションに含まれるJARファイルがmyapp.jarの1つのみで、classesサブディレクトリにあるクラスをクラス・パスに含める場合、jpackageコマンドに次を追加します:

--java-options "-cp \$APPDIR/myapp.jar:\$APPDIR/classes"

モジュラ・アプリケーションの場合、jpackageによって生成されるデフォルトのモジュール・パスは$APPDIR/modsです。ただし、--java-optionsを介して--module-pathオプションでモジュール・パスを指定すると、デフォルトのモジュール・パスの後にモジュール・パスが追加されます。デフォルトのパスは置換されません。

ファイル・アソシエーションの設定

ユーザーが特定のタイプのファイルを開いたときにアプリケーションが起動されるようにする場合は、アプリケーションをパッケージ化するときに--file-associationsオプションを使用します。

アプリケーションで処理可能なファイルをユーザーが開いたときにアプリケーションが起動するようにするには、アプリケーションのインストール時に作成するファイル・アソシエーションを定義します。アソシエーションは、jpackageに渡されるプロパティ・ファイルで定義されます。アソシエーションごとに、個別のファイルと--file-associationsオプションの個別のインスタンスが必要です。次のプロパティは、mime-typeまたはextensionのいずれかを含む必要があるアソシエーションを定義します:

  • mime-type - アプリケーションで処理できるファイルのMIMEタイプ。

  • extension - アプリケーションで処理できるファイルのファイル拡張子。

  • icon - アプリケーションで処理できるファイルのタイプに使用するアイコン。アプリケーションをパッケージ化するときに、アイコンは入力ディレクトリに存在している必要があります。アイコンを指定しない場合は、デフォルトのアイコンが使用されます。

  • description - アソシエーションの簡単な説明。

ファイル・アソシエーションを設定するには、最初にプロパティ・ファイルを作成します。次の2つのファイルで、JavaScriptファイルとGroovyファイルのアソシエーションを設定します。

FAjavascript.properties:

mime-type=text/javascript
extension=js
description=JavaScript Source

FAgroovy.properties:

mime-type=text/x-groovy
extension=groovy
description=Groovy Source

次のコマンドでは、アプリケーションFADemoをパッケージ化し、作成したプロパティ・ファイルを使用してファイル・アソシエーションを設定します。ユーザーが.jsまたは.groovyファイルを開くと、FADemoが起動します。

jpackage --name FADemo --input FADemo \
   --main-jar ScriptRunnerApplication.jar \
   --file-associations FAjavascript.properties \
   --file-associations FAgroovy.properties

ランチャの追加

アプリケーションを開始する方法が複数ある場合、--add-launcherオプションを使用して、作成する追加のランチャ・ツールを記述します。

アプリケーションで引数に異なるデフォルト値を使用する場合、Windowsコンソールを使用してもしなくてもアプリケーションを実行できる場合、または複数のアプリケーションをパッケージ化してランタイムを共有する場合は、追加のランチャが必要になることがあります。オプションの形式は--add-launcher launcher-name=properties-fileです。ここで、launcher-nameは追加のランチャに使用される名前です。名前にスペーが含まれている場合は、引用符を使用します。

ランチャは、jpackageに渡されるプロパティ・ファイルで定義されます。ランチャごとに、個別のファイルと--add-launcherオプションの個別のインスタンスが必要です。次のプロパティはランチャを定義します。少なくとも1つのオプションを設定する必要があります:

  • module - ランチャのメイン・クラスを含むモジュールの名前。メイン・モジュールがメイン・クラスを識別しない場合は、module=main-module/classの形式で指定します。

  • main-jar - ランチャのメイン・クラスを含むJARファイルの名前。

  • main-class - メイン・クラスの名前。

  • arguments - スペースで区切られたデフォルトの引数。引数にスペースが含まれる場合は、arguments=arg1 "arg 2" arg3のように引数を引用符で囲みます

  • app-version - バージョン番号。

  • java-options - スペースで区切られた、JVMに渡すオプション。引数にスペースが含まれる場合は、引用符で引数を囲みます。

  • icon - 追加のランチャに使用されるアイコン

  • win-console - trueに設定すると、アプリケーションでコンソールが起動します。

追加のランチャを定義するには、最初にプロパティ・ファイルを作成します。次の例は、ランチャの設定方法を示しています:

  • 異なるアプリケーション引数を含むランチャを追加します。

    アプリケーションの起動時に使用する異なるデフォルト引数を定義する次のプロパティ・ファイルを作成します。最初のファイルは、渡す3つの引数を定義します。2番目のファイルは、渡す2つの引数を定義します。

    MLAppArgs1.properties:
    
    arguments=arg1 arg2 arg3
    
    MLAppArgs2.properties:
    
    arguments="String 1" "String 2"

    次のコマンドは、作成したプロパティ・ファイルを使用して2つの追加ランチャを含むアプリケーションMyAppをパッケージ化します。

    jpackage --name MyApp --input samples/myapp --main-jar MyApp.jar \
       --add-launcher MyApp1=MLAppArgs1.properties \
       --add-launcher MyApp2=MLAppArgs2.properties
  • ランチャを追加してWindowsコンソールを起動します。

    コンソールを使用して、または使用せずにアプリケーションを実行するオプションをユーザーに提供するには、Windowsコンソールを使用するランチャを定義する次のプロパティ・ファイルを作成します。

    MLConsole.properties:
    
    win-console=true

    次のコマンドは、Windowsコンソールでアプリケーションを実行する追加のランチャでHelloWorldアプリケーションをパッケージ化します。

    jpackage --name HelloWorld --input helloworld \
       --main-jar HelloWorld.jar \
       --add-launcher HWConsole=MLConsole.properties 
  • 2番目のエントリ・ポイントにランチャを追加します。

    複数のアプリケーションが同じパッケージに含まれる場合、ランチャを追加することで各アプリケーションを個別に起動できます。FADemoと動的ツリー・アプリケーションがパッケージ化され、メイン・ランチャがFADemoアプリケーション用である場合、次のプロパティ・ファイルを作成し、動的ツリー・アプリケーション用の追加のランチャを定義します。

    MLDynamicTree.properties
    
    main-jar=DynamicTree.jar
    main-class=webstartComponentArch.DynamicTreePanel
    icon=DTDemo.ico

    次のコマンドは、2つのアプリケーションをパッケージ化し、作成したプロパティ・ファイルを使用して追加のランチャを設定します。

    jpackage --name MLDemo --input MLDemo \
       --main-jar ScriptRunnerApplication.jar \
       --add-launcher "Dynamic Tree"=MLDynamicTree.properties

アプリケーション・パッケージ(macOS)への署名

macOSで実行するアプリケーションの場合は、アプリケーションをパッケージ化するときに--mac-signおよびサポート・オプションを使用します。署名付きアプリケーション・イメージ(.app)を含むディスク・イメージ(.dmg)またはパッケージ(.pkg)は、認証できます。

必要なjpackageオプションは、Mac App Storeを介してアプリケーションを配布するかどうかによって異なります。

必要な証明書

Mac App Storeの外部でアプリケーションを配布する場合、証明書「Developer ID Application: <user or team name>」および「Developer ID Installer: <user or team name>」が必要です。

Mac App Storeを介してアプリケーションをデプロイする場合、証明書「3rd Party Mac Developer Application: <user or team name>」および「3rd Party Mac Developer Installer: <user or team name>」が必要です。

macOSアプリケーション・パッケージに署名するためのオプション

macOSアプリケーション・パッケージに署名するには、次のjpackageオプションを含めます:

  • --mac-sign: バンドルにmacOS用の署名を要求します。

  • --mac-signing-key-user-name user_or_team_name: キー・ユーザーまたはチーム名。これは、Apple署名アイデンティティの名前の部分です。

また、次のオプションが必要になる場合があります

  • --mac-package-signing-prefix prefix: アプリケーション・バンドルに署名する際、署名する必要のある、既存のバンドル識別子を持たないすべてのコンポーネントにこの値が接頭辞として付けられます。このオプションを指定しない場合、接頭辞は、(修飾されていない)メイン・クラス名の後にピリオド(.)が続きます。

  • --mac-signing-keychain keychain_name: 標準のキーチェーン以外のキーチェーンを使用する場合は、キーチェーン・アクセス・アプリケーションに表示されるキーチェーンの名前を指定します。名前は.keychainで終わる必要があります。

  • --type type: アプリケーション・イメージ(.app)を作成する場合は、app-imageを指定します。パッケージ(.pkg)を作成する場合は、pkgを指定します。このオプションを指定しない場合、このオプションはディスク・イメージ(.dmg)を作成します。

  • --mac-entitlements path: バンドル内の実行可能ファイルおよびライブラリに署名するときに使用する権限を含むファイルへのパス。

    --mac-entitlementsオプションも--mac-app-storeオプションも指定しない場合、jpackageは組込みリソースである権限ファイルdefault.plistを使用します(「パッケージ化で使用されるリソース」を参照)。これには、署名されたアプリケーションがJDKを実行できるようにする権限が含まれています。

次のコマンドでは、「Developer ID Application: developer.example.com」証明書で署名されたアプリケーション・イメージを含むディスク・イメージ(.dmg)が生成されます。ディスク・イメージは、接頭辞com.example.developer.OurApp.およびチーム名developer.example.comで生成されます。

jpackage --name DynamicTreeDemo --input myApps --main-jar DynamicTree.jar \
   --mac-sign --mac-package-signing-prefix com.example.developer.OurApp. \
   --mac-signing-key-user-name "developer.example.com"

次のコマンドでは、「Developer ID Installer: developer.example.com」証明書で署名されたアプリケーション・イメージを含むパッケージ(.pkg)が生成されます。パッケージは、接頭辞com.example.developer.OurApp.およびチーム名developer.example.comで生成されます。

jpackage --type pkg --name DynamicTreeDemo --input myApps \
   --main-jar DynamicTree.jar --mac-sign --mac-package-signing-prefix com.example.developer.OurApp. \
   --mac-signing-key-user-name "developer.example.com"

Mac App Storeのアプリケーション・パッケージに署名するためのオプション

Mac App Storeのアプリケーション・パッケージに署名するには、次のjpackageオプションも含めます:

  • --mac-app-store: jpackage出力がMac App Storeを対象としていることを示します。

  • --mac-entitlements path: バンドル内の実行可能ファイルおよびライブラリに署名するときに使用する権限を含むファイルへのパス。このファイルにより、アプリケーションをシステム・リソースとユーザー・データに制限するアプリケーション・サンドボックス権限が有効になります。これは、Mac App Storeを介して配布されるアプリケーションに必要です。

    --mac-entitlementsオプションを指定せず、--mac-app-storeオプションを指定する場合、jpackageは組込みリソースである権限ファイルsandbox.plistを使用します(「パッケージ化で使用されるリソース」を参照)。これには、アプリケーション・サンドボックス権限を有効にする<key>com.apple.security.app-sandbox</key><true/>が含まれています。

  • --mac-app-category category: Mac App Storeのアプリケーション・パッケージを最もよく表すカテゴリを指定します。jpackageツールは、LSApplicationCategoryTypeの値を、アプリケーションの.plistファイルのこのオプションの値に設定します。このオプションのデフォルト値はutilitiesです。有効なカテゴリのリストは、Apple Developer DocumentationLSApplicationCategoryTypeを参照してください。