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"

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

ユーザーが特定のタイプのファイルを開いたときにアプリケーションが起動されるようにする場合は、アプリケーションをパッケージ化するときに--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およびサポート・オプションを使用します。署名済.dmgパッケージ、.pkgパッケージ、またはアプリケーションイメージから作成されたZIPファイルを認証できます。

署名をリクエストする--mac-signオプションに加え、--mac-package-signing-prefixオプションで署名接頭辞を指定し、--mac-signing-key-user-nameオプションでキー・ユーザー名を指定する必要もあります。標準のキーチェーン以外のキーチェーンを使用する場合は、そのキーチェーン・ファイルに--mac-signing-keychainオプションを指定する必要もあります。

次のコマンドでは、接頭辞xxxxxxおよび「Developer ID Application: developer.example.com」証明書を使用して、署名済の.dmgパッケージが生成されます。文字列にスペースが含まれる場合は、引用符が必要です。

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

署名済.pkgパッケージが生成されると、次のコマンドは接頭辞xxxxxxおよび「Developer ID Installer: developer.example.com」証明書を使用します。

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