JDK 8u451では、JavaFXはJava SE 8の一部として含まれなくなりました。 その結果、javapackagerツールが削除されました。 詳細は、https://www.oracle.com/javase/javafxを参照してください。
このトピックでは、Javaパッケージ化およびツールの概要について説明します。
この節の内容は以下のとおりです。
適切にパッケージ化されたアプリケーションは、次の1つ以上のデプロイメント・モードで実行されます。
システムJREを使用してスタンドアロン・アプリケーションとして
JREのプライベート・コピーを使用して自己完結型アプリケーションとして
システムJREを使用してJava Web Startアプリケーションとして
システムJREを使用してWebページに埋め込んで
デフォルトでは、Javaパッケージ化ツールにより、次に示す機能など、様々なユーザー環境でユーザー操作性の向上に必要なすべてのものを含むパッケージが作成されます。
必要なJREが確実にインストールされているようにする。
欠落した依存性を自動ダウンロードするか、必要に応じてインストールを提案する。
アプリケーションのロード中、ユーザーに視覚的なフィードバックを提供する。
説明的なエラー・メッセージを表示する。
Javaアプリケーション・パッケージは、変更することなく次の実行環境で動作します。
Java起動ツールを使用して、コマンド行から起動する。
JARファイルをダブルクリックする。
自己完結型アプリケーション起動ツールをダブルクリックする。
アプリケーションをWebページに埋め込む。
オプションで、Javaパッケージ化ツールは、外部ソフトウェアへの依存性を回避することによって再配布を簡略化する自己完結型アプリケーション・パッケージを作成できます。 自己完結型アプリケーション・パッケージの詳細は、第7章「自己完結型アプリケーションのパッケージ化」を参照してください。
デフォルトで生成されるJavaアプリケーション・パッケージには、次のアイテムが含まれています。
アプリケーション・コードおよびリソースを含み、ファイルをダブルクリックして起動できる実行可能なアプリケーションJARファイル
追加のアプリケーションJARファイルおよびリソース・ファイル
JNLPファイルに保持されている、Webデプロイメント用のデプロイメント記述子
WebページからJavaコンテンツの埋込みおよび起動を行うサンプルJavaScriptコードを含むHTMLファイル
図5-1は、ベースJavaFXアプリケーション・パッケージの構造の例を示しています。 デフォルトでは、NetBeans IDEには、web-filesフォルダの他のサポート・ファイルのコピーも含まれています。 しかし、パブリック・バージョンは常に最新であるため、本番用にはdtjava.jsファイルのパブリック・コピーを使用することをお薦めします。
Javaパッケージャ・ツールは、Javaアプリケーションのパッケージ化を簡略化するいくつかのステップをビルド・プロセスに追加しました。 これらのステップを図5-2に示します。
プロセスの追加のステップは、色の付いた矢印でマークされています。
(オプション、JavaFXのみ)バイナリ形式へのスタイル・シートの変換。
CSSファイルをバイナリ形式に変換して、アプリケーション実行時の解析のオーバーヘッドを削減します。
JARの作成
JavaFXアプリケーションに必要なコードおよびリソースをJARファイルにパッケージ化し、要求された場合はプリローダーJARを埋め込みます。
5.5項「メイン・アプリケーションJARファイルの作成」を参照してください。
Javaアプリケーションの場合、JARファイルの作成には、Javaパッケージャではなくjarコマンドをお薦めします。
JARファイルへの署名
アプリケーションをWebページに埋め込んだりブラウザから起動したりする場合、JARファイルへの署名が必要です。
jarsignerツールとは異なる方法を使用して、JARファイルに署名します。 この方法により、署名のためのJARサイズのオーバーヘッドが削減され、ダウンロード時間が改善します。
5.6項「JARファイルへの署名」を参照してください。
デプロイ・タスクの実行
配布用のアプリケーション・パッケージを構築します。 デフォルトでは、デプロイ・タスクでベース・アプリケーション・パッケージが生成されますが、要求された場合は自己完結型アプリケーション・パッケージも生成できます。 5.7項「デプロイ・タスクまたはコマンドの実行」および第7章「自己完結型アプリケーションのパッケージ化」を参照してください。
Javaアプリケーションをパッケージ化するための推奨された方法は、JREに付属しているAntタスク(ant-javafx.jar)のコレクションを使用することです。
NetBeans IDEでは、これらのAntタスクを使用して、JavaFXおよびJava SEプロジェクトをパッケージ化します。 NetBeans IDEでの埋込みパッケージ化のサポートは、通常の使用事例の大部分をサポートしています。 ただし、何か特別なものが必要な場合、カスタム・パッケージ化のフックをbuild.xmlファイルに追加して(たとえば-post-jarターゲットとして)、パッケージ化を調整できます。
他の一般的なIDEの大部分は、カスタムAntビルド・スクリプトを簡単に使用できます。 他の一般的なビルド・フレームワーク(たとえばMavenやGradleなど)では、Antとの統合もサポートしています。
JREには、コマンド行パッケージ化ユーティリティjavapackagerが含まれており、これは単純なパッケージ化タスクに使用できます。 javapackagerは便利なユーティリティですが、Antタスクと比べて柔軟性はなく、オプションも多くありません。
表5-1では、使用可能な様々なパッケージ化ツールを使用してビルド・ステップを実行する方法をまとめています。 javapackagerは-makeallマクロ・コマンドも指定して、単純なアプリケーションの完全なアプリケーション・パッケージを作成します。 詳細は、第9章「Javaパッケージャ・ツール」を参照してください。
表5-1 Javaパッケージ化タスクおよびツール
| タスク | Javaパッケージャ・ライブラリAntタスク | Javaパッケージャ・ツール・コマンド | NetBeans IDE |
|---|---|---|---|
|
バイナリ形式へのCSSファイルの変換(5.4項「スタイル・シート変換」を参照) |
|
javapackager -createbss |
「プロジェクト・プロパティ」の「パッケージング」カテゴリ
|
|
JARアーカイブの作成(5.5項「メイン・アプリケーションJARファイルの作成」を参照) |
|
javapackager -createjar |
デフォルトではプロジェクト・プロパティの構成を使用してビルド・コマンドで発生します。 |
|
バイナリ・オブジェクトとしてJARアーカイブに署名(5.6項「JARファイルへの署名」を参照) |
|
javapackager -signJar |
「プロジェクト・プロパティ」の「デプロイメント」カテゴリ
|
|
デプロイメント用のアプリケーション・パッケージの構築(5.7項「デプロイ・タスクまたはコマンドの実行」および第7章「自己完結型アプリケーションのパッケージ化」を参照) |
|
javapackager -deploy |
ビルド・コマンドを使用して、ベース・アプリケーション・パッケージがデフォルトで作成されます。 自己完結型アプリケーションを作成するには、7.3.2項「基本的なビルド」を参照してください。 |
スタイル・シートのバイナリ形式への変換はオプションですが、アプリケーションのパフォーマンスが向上します。 これは大規模なCSSファイルで特に顕著に表れます。
バイナリCSSファイルを使用するには、例5-1に示すように、コードのCSSファイルではなくバイナリ・ファイルを参照します。
例5-1 バイナリ・スタイルシートの使用
scene.getStylesheets().add(this.getClass().getResource
("mystyles.bss").toExternalForm());
次の方法は、バイナリへのスタイル・シートの変換に使用できます。
Antタスク: 「バイナリへのCSSファイルの変換」を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerリファレンスの-createbssコマンドを参照してください。
NetBeans IDE: 「プロジェクト・プロパティ」の「パッケージング」カテゴリでバイナリ・エンコードJavaFX CSSファイルを選択して、スタイル・シートを変換します。
アプリケーション・クラスおよびリソースに加えて、メイン・アプリケーションJARファイルを作成する際に、次の情報を指定できます。
プラットフォーム要件
JREの必須バージョン
必須Java VM引数
アプリケーションに関する次の詳細
メイン・アプリケーション・クラスの名前(必須)
プリローダーが指定されている場合は、JavaFXプリローダー・クラスの名前
アプリケーション・リソースの詳細(該当する場合)
JARファイルに含まれているクラス・ファイルおよび他のリソースのセット
カスタムJavaFXプリローダーJARファイルなど、アプリケーションで必要な補助JARファイルのリスト(必要な場合)
Javaパッケージ化ツールを使用してメイン・アプリケーションJARファイルを作成することは、JARファイルおよびダブルクリックで起動できる自己完結型アプリケーションのパッケージ化には非常に重要です。 メイン・アプリケーションJARファイルには、ブートストラップ起動を処理する起動ツール・プログラムが含まれており、次のタスクを実行することによって起動が改善します。
JREの確認
ユーザーへの必要な手順の説明
アプリケーションのシステム・プロキシの設定
|
ノート: JavaFXプリローダーがある場合、図5-2に示すように、説明されているパッケージ化方法のいずれかを使用して、プリローダー・リソースを含む別のJARファイルを作成します。 詳細は、第13章「JavaFXアプリケーションのプリローダー」を参照してください。 |
次の方法は、メイン・アプリケーションJARファイルの作成に使用できます。
Antタスク: 「<fx:jar>の使用例」を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerリファレンスの-createjarコマンドを参照してください。
NetBeans IDE: プロジェクトのプロティでこの情報を指定すると、JARファイルが自動的に作成されます。
JARファイルへの署名に従来の方法を使用する場合、詳細は、Javaチュートリアルのコード署名のステップに関する項、および標準的なAnt signjarタスクの説明を参照してください。 Javaアプリケーションには、従来の方法をお薦めします。
Javaパッケージ化ツールでは、JARファイルへの署名のサイズのオーバーヘッドを削減するのに役立つ、代替の署名方法が提供されています。 この方法を使用すると、すべてのJARエントリに個別に署名するのではなく、1つの大きいオブジェクトとしてJARファイルに署名します。 この方法では、JARの合計サイズの10パーセントまで節約できます。
代替の署名方法を使用するには、キーストアおよび署名キーが必要です。 手順は、キーの生成に関するJavaチュートリアルを参照してください。
次の方法は、JARファイルへの署名に使用できます。
Antタスク: 「<fx:jar>の使用例」を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerリファレンスの-signJarコマンドを参照してください。
NetBeans IDE: 「プロジェクト・プロパティ」の「無制限のアクセスをリクエスト(&R)」チェック・ボックスを選択して、署名を有効化します。 特定の証明書に署名するには、チェック・ボックスの隣の「編集」をクリックします。
|
ノート: 単一のデプロイメント記述子ファイルのコンテキストで、すべてのJARファイルを署名または無署名にする必要があります。 署名および無署名のJARファイルを混在させる必要がある場合、追加のAntタスクを使用して、各JARファイルに追加のデプロイメント記述子を生成します。 これらの追加のデプロイメント記述子は、拡張記述子と呼ばれます。 メイン記述子が生成されると、<fx:resources>を使用して、拡張記述子を参照します。 これの実行方法の例は、「拡張記述子の<fx:resources>の使用」を参照してください。 |
基本的な配布パッケージは、次のアイテムで構成されています。
メイン実行可能JARファイル
(オプション) JavaFXプリローダー・コードを含むJARファイルなど、一連の補助JARファイル
アプリケーションのデプロイ方法を定義するデプロイメント記述子
独自のWebページにアプリケーションを埋め込むサンプル・コードを含む基本HTMLファイル、またはHTMLテンプレートの前処理の結果となるカスタムWebページのいずれか
Javaパッケージ化ツールは、自己完結型アプリケーション・バンドルとしてアプリケーションをパッケージ化することもできます。 このオプションはデフォルトでは無効です。 詳細は、第7章「自己完結型アプリケーションのパッケージ化」を参照してください。
配布可能なパッケージを構築するには、次のいずれかの方法を使用します。
Antタスク: 「<fx:deploy>タスクの使用例」を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerリファレンスの-deployコマンドを参照してください。
NetBeans IDE: プロジェクトがビルドされるたびに配布可能なパッケージを作成します。 パッケージ化のオプションは、プロジェクトのプロパティに設定されます。
このタスクの主要な部分では、Webデプロイメントのデプロイメント記述子を入力するための情報を提供しています。 次の情報が必要です。
エントリ・ポイント: メイン・アプリケーション・クラス、JavaFXプリローダー・クラス、およびその他の詳細
<fx:application>タグの属性として定義されます。
アプリケーションに渡されるパラメータ
<fx:application>の下の<fx:param>および<fx:htmlParam>タグを使用して定義されます。
優先アプリケーションのステージ・サイズ
埋込みコンテンツの表示領域を予約することは重要です。
幅および高さは、Antタスクの<fx:deploy>タグのwidthおよびheight属性、WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerツールのjavapackager -deployコマンド、またはNetBeansの「プロジェクト・プロパティ」の「実行」カテゴリを使用して定義されます。
アプリケーションの起動中にユーザーに表示されるダイアログ・ボックスで使用されるアプリケーションの説明
<fx:info>タグを使用して定義されます。
必要なバージョンのJREおよびJVMの設定などのプラットフォーム要件
<fx:platform> タグを使用して定義されます。 例は、「JVMオプションを指定する<fx:platform>パラメータ」を参照してください。
デスクトップへのショートカットや「スタート」メニューへの参照の追加などの、アプリケーションのデスクトップ統合プリファレンス。
オプションの<fx:preferences>タグを使用して定義されます。 「<fx:preferences>の使用例」を参照してください。
アプリケーションの実行に必要な権限
デフォルトでは、Webアプリケーションはサンドボックスで実行されます。 高い権限を要求するには、<fx:permissions>タグを使用します。
次のタイプのリソース・ファイルがサポートされています。
JARファイル
ネイティブJARファイル
JNLPファイル
アイコン
ライセンス・ファイル
データ・ファイル
すべてのリソースには、関連付けられた追加のメタデータがあります。たとえば、このリソースが適用可能なオペレーティング・システムやアーキテクチャ、およびこのリソースが必要とされるアプリケーションのライフ・サイクル内のポイントを定義する優先プリファレンスなどです。 メタデータを注意して使用すると、アプリケーションの起動操作に重大な影響を及ぼすことがあります。 サポートされている値のリストは、表10-10を参照してください。
リソース・セットのすべてのファイルは、ビルド出力フォルダにコピーされます。 しかし、以降の段落で説明するように、すべてのファイルがすべての実行モードで使用されているわけではありません。
実行モードに関係なく、リソース・セットのすべての通常のJARファイルは、アプリケーション・クラス・パスに追加されます。
ネイティブのJARファイルおよびJNLPファイルは、Webデプロイメントにのみ使用されます。 追加のJNLPファイルは、通常、外部のJNLP拡張を参照するために、またはアプリケーション自体が一連のコンポーネントとしてパッケージ化される場合に使用されます。 JavaFX Antタスク・リファレンスの「拡張記述子の<fx:resources>の使用」を参照してください。
ネイティブJARファイルは、アプリケーションで使用されるネイティブ・ライブラリのデプロイに使用されます。 各ネイティブJARファイルは、一連のネイティブ動的ライブラリを含めることができ、本質的にプラットフォーム固有です。 詳細は、例5-11および5.8.3項「複合アプリケーションのパッケージ化」を参照してください。
ライセンス・ファイルは、現在、自己完結型アプリケーションにのみ適用可能で、クリックスルー・ライセンスをインストール可能なパッケージに追加するために使用されます。 7.4項「インストール可能なパッケージ」を参照してください。
データ・ファイルに特別なセマンティックスはなく、アプリケーションは何に対しても自由に使用できます。 たとえば、アプリケーションがムービー・ファイルをバンドルする必要がある場合、それは「データ」としてマークすることができ、アプリケーション・パッケージに含まれます。
詳細は、表10-10を参照してください。
配備ツールキットでは、アプリケーションがブラウザでデプロイされると、起動動作のカスタマイズに使用できる一連のフックが提供されます。 開発者はフックへのコールバック関数をインストールする必要があるため、フックは配備ツールキットによって利用されます。
第19章「ブラウザでのデプロイメント」では、使用可能なフックと、それのコードでの使用方法について詳細に説明します。 ただし、フックが正しくインストールされていることを確認するには、パッケージ化の際にフックを指定する必要もあります。
コールバックを指定するには、<fx:deploy>の下の<fx:callbacks>タグでコールバックをリストします。 インストールするすべてのコールバックの<fx:callback>エントリを追加し、name属性にフックの名前を指定します。 <fx:callback>タグの内容は、使用するJavaScript関数です。 完全な関数定義を使用したり、別の場所で定義された関数を参照したりできます。
次の方法は、カスタムJavaScriptアクションのパッケージ化に使用できます。
Antタスク: 「<fx:jar>の使用例」を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerリファレンスの-deployコマンドを参照してください。
NetBeans IDE: 「プロジェクト・プロパティ」の「デプロイメント」カテゴリにコールバックを追加します。 カスタムJavaScriptアクションの右にある「編集」ボタンをクリックします。
デフォルトでは、Javaパッケージ化ツールにより、埋込みアプリケーションのプレースホルダが含まれる単純なWebページが生成されます。 この生成されたページから自身のWebページにコードを手動でコピーできますが、これはエラーが発生しやすく、頻繁に行う必要があると時間がかかります。
Javaパッケージ化ツールは、入力テンプレートを使用することによって、既存のWebページへの必要なコードの注入もサポートしています。 この方法が特に便利なのは、アプリケーションがWebページに密接に統合されている場合(たとえばアプリケーションがWebページとの通信にJavaScriptを使用する場合や、コールバックが使用され、そのコードがWebページ自体に保持される場合など)です。
入力テンプレートは、Webページでアプリケーションのデプロイに必要なJavaScriptやHTMLコードに置き換えられるマーカーを含むHTMLファイルです。 例5-2は、JavaFXアプリケーションの入力テンプレートの例を示しています。
例5-2 HTML入力テンプレート
<html>
<head>
<title>Host page for JavaFX Application</title>
#DT.SCRIPT.CODE#
#DT.EMBED.CODE.ONLOAD#
</head>
<body>
<h1>Embed JavaFX application into existing page</h1>
<!-- application will be inserted here -->
<div id="ZZZ"></div>
</body>
</html>
#DT.SCRIPT.CODE#および#DT.EMBED.CODE.ONLOAD#は、テンプレートが処理されるとJavaScriptおよびHTMLコードに置換されるマーカーです。 マーカーの形式は#MARKERNAME#または#MARKERNAME(id)#になります。ここで、idはアプリケーションの識別子(Antを使用している場合は<fx:deploy>タグのid属性を使用して指定)で、MARKERNAMEはマーカーのタイプです。 idが指定されていない場合、MARKERは任意のアプリケーションに一致します。 サポートされているマーカーのリストは、Antタスク・リファレンスの<fx:template>を参照してください。
テンプレートは、同じページの複数のアプリケーションをデプロイする際に使用できます。 アプリケーションIDを含むマーカーの完全な形式(空白なしの英数字の文字列)を使用し、挿入する各アプリケーションをパッケージ化する際に部分的に処理されたテンプレート・ファイルを渡します。
例5-3は、複数のアプリケーションのデプロイに使用されるテンプレートの例を示しています。
例5-3 複数のアプリケーションのデプロイに使用される入力テンプレート
<html>
<head>
<title>Page with two application</title>
<script src="#DT.SCRIPT.URL#"></script>
<!-- code to load first app with id 'firstApp'
(specified as attribute to fx:application) -->
<!-- #DT.EMBED.CODE.ONLOAD(firstApp)# -->
<!-- code to load first app with id 'secondApp' -->
<!-- #DT.EMBED.CODE.ONLOAD(secondApp)# -->
</head>
<body>
<h1>Multiple applications in the same page</h1>
JavaFX app: <br>
<!-- First app. Ant task need to use "ZZZ_1 as placeholderId -->
<div id="ZZZ_1"></div>
Another app: <br>
<!-- Second app. Ant task need to use "ZZZ_2 as placeholderId -->
<div id="ZZZ_2"></div>
</body>
</html>
例5-3は、マーカーをHTMLコメントに配置できるテンプレート・プロセッサの便利な機能の1つを示しています。 コメントにマーカー・コード以外のものが含まれていない場合、コメント・タグは、結果のHTMLのコンテンツから削除されます。 この機能によって、テンプレート・ページのHTMLの正しい形式が保持されます。
次の方法は、テンプレートを使用する際に使用できます。
Antタスク: テンプレート・タグを追加します。 <fx:jar>の使用例を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS X用のjavapackagerリファレンスの-deployコマンドを参照してください。
NetBeans IDE: 「プロジェクト・プロパティ」の「実行」カテゴリで、入力HTMLテンプレート・ファイルを指定します。
この項では、一般的なデプロイメント・タスクの様々な例を示します。
例ではAnt APIを使用していますが、ほとんどの場合、Javaパッケージャ・ツールすると同じ結果を得られます。 第10章「JavaFX Antタスク」および第9章「Javaパッケージャ・ツール」を参照してください。
JavaおよびJavaFXアプリケーションは、2つのタイプのアプリケーション・パラメータ(名前付きと名前なし)をサポートしています(Application.ParametersのAPIを参照してください)。
静的な名前付きパラメータは<fx:param>を使用してアプリケーション・パッケージに追加でき、名前なしパラメータは<fx:argument>を使用して追加できます。 これは、スタンドアロン・アプリケーションを含むすべての実行モードに適用可能です。
パラメータは、<fx:htmlParam>を使用して、アプリケーションをホストするWebページからJavaおよびJavaFXアプリケーションに渡すこともできます。<fx:htmlParam>は、埋込みアプリケーションとJava Web Startアプリケーションの両方に適用可能です。
HTMLページからパラメータを渡すことは、パラメータが動的な場合は最も便利です。 この方法を使用するには、次のアプローチが推奨されます。
Webページ・テンプレート(5.7.4項「Webページ・テンプレート」を参照)を使用して、動的パラメータを準備するJavaScriptコードを提供します。
<fx:htmlParam>の値としてJavaScriptコードを渡し、escape="false"を指定します。 コードは実行時に評価されます。
例5-4は、様々なパラメータ・タイプの使用を示しています。
例5-4 様々なパラメータ・タイプの使用
<fx:application name="Test" mainClass="tests.Params">
<!-- unnamed parameters -->
<fx:argument>Arg1</fx:argument>
<fx:argument>Arg2 with spaces </fx:argument>
<!-- name parameters -->
<param name="sampleParam" value="Built with ${java.version}"/>
<param name="noValueParam"/>
<!-- parameters passed from HTML page -->
<htmlParam name="staticParamFromWebPage"
value="(new Date()).getTime()"/>
<htmlParam name="dynamicParamFromWebPage" escape="false"
value="(new Date()).getTime()"/>
</fx:application>
アプリケーションは大きいヒープ・サイズを必要としますか。 ガベージ・コレクタの動作の調整、またはクラスのロードのトレースを行いますか。
Antタスクの<fx:jvmarg>および<fx:property>タグを使用して、必要なJVMオプションを指定し、システム・プロパティを設定できます。 これらのタグは、スタンドアロン・アプリケーションを除くすべての実行モードに適用可能です。 JARファイルをダブルクリックするとデフォルトのJVMが常に取得されますが、自己完結型アプリケーション、Java Web Startアプリケーション、またはWebページに埋め込まれたアプリケーションを実行している場合、JVMを要件に合せることができます。
セキュアではないJVMオプションまたはシステム・プロパティを使用する場合、アプリケーションは高い権限を持っている必要があります。 セキュアなJVMコマンドライン引数およびシステム・プロパティのセットは、「Java Web Startガイド」の"JNLPファイルの構文"セクションの「resources要素」サブセクションで定義されます。
例5-5では、アプリケーションが実行されるとJVMが次の引数で起動されるように、Antタスクはアプリケーションをパッケージ化します。
-Xmx400 -verbose:jni -Dpurpose=sample
-verbose:jniもpurposeもセキュアではない場合、Java Web Startおよび埋込みの実行モードでは、高い権限が必要です。
例5-5 AntタスクでのカスタムJVMオプションおよびプロパティの指定
<fx:platform javafx="2.1+">
<fx:jvmarg value="-Xmx400m"/>
<fx:jvmarg value="-verbose:jni"/>
<fx:property name="purpose" value="sample"/>
</fx:platform>
|
ノート: デフォルトでは、パッケージ・アプリケーションに含まれるJVMは、セキュリティ・マネージャがインストールされずに実行されます。 |
ユーザーがオーバーライドできるJVMオプションを指定する機能が必要な場合、<fx:platform>の<fx:jvmuserarg>属性を使用するか、自己完結型アプリケーションの場合はJavaパッケージャ・ツールの-BuserJvmOptions属性を使用します。 これらの属性は、ユーザーによってオーバーライドできる属性を明示的に定義します。
例5-6 ユーザーがAntタスクでオーバーライドできるオプションの指定
<fx:platform>
<fx:jvmuserarg name="-Xmx" value="768m" />
<fx:jvmuserarg name="-Xms" value="128m" />
</fx:platform>
Javaパッケージャ・ツールを使用して自己完結型アプリケーションをパッケージする場合、次の属性を含めます。
-BuserJvmOptions=-Xmx=768m
-BuserJvmOptions=-Xms=128m
例では、-Xmx768mはヒープ・サイズのデフォルト値として渡され、-Xms128mは初期ヒープ・サイズのデフォルト値として渡されます。 ユーザーは、LinuxおよびOS X上のユーザー構成ファイル、またはWindows上のレジストリで、これらの値をオーバーライドできます。 構成ファイルおよびレジストリは、場所および形式にJava Preferences APIの規則を使用します。 自己完結型アプリケーションでUserJvmOptionsService APIを使用して、アプリケーション内にJVMオプションを設定できるようになりました。 このAPIの詳細は、第15章「自己完結型アプリケーションでのJVMオプションのカスタマイズ」を参照してください。
アプリケーションのユーザー・プリファレンスのノードは、アプリケーションIDに基づいており、これは必要に応じてプリファレンスUIを指定できるように、アプリケーションに-Dapp.preferences.idとして渡されます。 プリファレンスIDが渡されない場合、完全修飾のメイン・クラス名が使用されます。 アプリケーションは、ノード-Dapp.preferences.idおよびキーJVMOptionsのJVMユーザー・オプションにアクセスできます。
次の例では、異なるプラットフォーム上で、JVMヒープ・サイズ値768mを400mにオーバーライドするためのコードを示します。
例5-7 OS Xでのデフォルト値のオーバーライド
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>JVMUserOptions</key> <dict> <key>-Xmx</key> <string>400m</string> </dict> </dict> </plist>
アプリケーションに渡されるパラメータのインストール・ディレクトリのルートに文字列を置換できます。 具体的には、マクロ$APPDIRを使用できます。これは、バンドラが作成する自己完結型バンドルを含むディレクトリのフルパスです。 次の例では、プログラムがC:\Program Files\myexampleにインストールされている場合、マクロ$APPDIRはC:\Program Files\myexample\appに展開します(appディレクトリは、この例でアプリケーション・リソースがインストールされている場所であるため)。
多くの場合、実際のアプリケーションには、1つより多くのJARアーティファクトがあります。 サード・パーティ製のライブラリ、データ・ファイル、ネイティブ・コードなどがある場合があります。 複合アプリケーションの場合、異なる実行モードをサポートするために、パッケージ化の特別な調整が必要になる可能性があります。
次の提案は、複合アプリケーションのパッケージ化の一般的なガイドラインです。
それに応じて、プラットフォーム固有のリソースをマークします。
ユーザーがダブルクリック可能なJARファイルの場合、すべてを単一のJARファイルにパッケージ化し、そのJARファイル内からネイティブ・ライブラリおよびデータ・ファイルをロードすることを検討します。
または、複数のファイルがある場合、次を行います。
すべての依存JARファイルが、メインJARファイルを作成する<fx:jar>タスクの<fx:resources>タグにリストされていることを確認します。
type="data"のファイルセットにすべてのデータ・ファイルおよびライブラリをリストし、出力フォルダにコピーします。
メインJARファイルに相対的な場所から、ネイティブ・ライブラリおよびリソースをロードします。
Antタスク・リファレンスに関する章の例「単純なアプリケーションの<fx:jar> Antタスク」を参照してください。
次のガイドラインは、自己完結型アプリケーション用のものです。
<fx:jar>を使用しているメインJARファイル以外をパッケージ化しないようにします。
メイン・アプリケーションJARファイルの<fx:deploy>および<fx:jar>の<fx:resources>セクションに、すべての依存JARファイルをリストします。
アプリケーションJARファイルに相対的で明示的な場所を使用してネイティブ・ライブラリをロードするか、ネイティブ・ライブラリをルート・アプリケーション・フォルダにコピーします。 type="data"を使用して、ネイティブ・ライブラリ・ファイルをコピーします。
例7-4を参照してください。
次のガイドラインは、Java Web Startおよび埋込みアプリケーション用のものです。
<fx:deploy>の<fx:resources>セクションに、すべての依存JARファイルをリストします。
ネイティブ・ライブラリを配布用のJARファイルにラップします。
プラットフォーム当たり1つのJARファイルを使用します。 JARファイルにネイティブ・ライブラリのみが含まれていること、およびライブラリがすべてJARファイルの最上位のフォルダにあることを確認してください。
例5-11を参照してください。
例5-11 JARファイルへのネイティブ・ライブラリのパッケージ化
<jar destfile="${basedir}/build/native-libs-win-x86.jar"
basedir="native/windows/x86" includes="*"/>
<jar destfile="${basedir}/build/native-libs-win-x86_64.jar"
basedir="native/windows/x86_64" includes="*"/>
....
<!-- sign all jar files --->
<signjar keystore="test.keystore" alias="TestAlias" storepass="xyz123">
<fx:fileset dir="dist" includes="**/*.jar"/>
</signjar>
<!-- assemble package -->
<fx:deploy width="600" height="400"
outdir="${basedir}/${bundle.outdir}"
outfile="Demo">
<fx:info title="Demo app"/>
<fx:application name="${bundle.name}"
mainClass="${javafx.main.class}"/>
<fx:permissions elevated="true"/>
<fx:resources>
<!-- jar files with classes and shared data -->
<fx:fileset dir="dist" includes="*.jar"/>
<fx:fileset dir="dist" includes="lib/*.jar"/>
<!-- add native libs for deployment descriptor -->
<fx:fileset dir="build" type="native"
os="windows" arch="x86">
includes="native-libs-win-x86.jar"/>
</fx:fileset>
<fx:fileset dir="build" type="native"
os="windows" arch="x64"
includes="native-libs-win-x86_64.jar"/>
</fx:fileset>
...
</fx:resources>
</fx:deploy>
ブラウザ・ウィンドウのサイズに相対的なサイズ埋込みアプリケーションには、<fx:deploy>タスクのembeddedWidthおよびembeddedHeight属性を使用します。 これらのオプションの属性は、埋込みアプリケーションにのみ、および生成されたHTMLとJavascriptコードでのみ使用されます。 また、widthおよびheightの値(ピクセル)も引き続き必要です。
ブラウザ・ウィンドウに完全に入力するには、embeddedWidthおよびembeddedHeightを"100%"に設定します。 次の理由でスクロール・バーがブラウザ・ウィンドウに追加されるため、これは単独では完璧な結果を得られません。
デフォルトのHTMLテンプレートには、他のコンテンツがあります。
HTMLタグのデフォルトのスタイルは、マージンなどの領域を予約する場合があります。
生成されるWebページは表示領域より大きくなるように表示されるため、ブラウザにはスクロール・バーが追加されます。
完全な解決策は次のステップで構成されています。
<fx:deploy>タスクにembeddedWidth="100%"およびembeddedHeight="100%"を指定します。 (例5-12を参照してください。)
カスタムWebページ・テンプレートを追加します。 (例5-13および5.7.4項「Webページ・テンプレート」を参照してください。)
使用されたHTML要素のスタイルをリセットして、アプリケーションが表示領域の唯一の要素であることを確認します。
例5-12 パッケージ化
<fx:deploy width="100" height="100"
embeddedWidth="100%" embeddedHeight="100%"
outdir="${basedir}/${dist.dir}" outfile="${application.title}">
<fx:application name="${application.title}"
mainClass="${javafx.main.class}"/>
<fx:template file="${basedir}/web/index_template.html"
tofile="${dist.dir}/TestApp.html"/>
<fx:resources>
<fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
</fx:resources>
<fx:info title="${application.title}"
vendor="${application.vendor}"/>
</fx:deploy>
例5-13 Webページ・テンプレート(web/index_template.html)
<html>
<head>
<!-- This will be replaced with javascript code to embed the application -->
<!-- #DT.SCRIPT.CODE#-->
<!-- #DT.EMBED.CODE.ONLOAD#-->
<!-- Reset html styles to ensure these elements do not waste space -->
<style>
html, body {
margin: 0;
}
</style>
</head>
<body>
<!-- Application will be added to the div below -->
<div id='javafx-app-placeholder'></div>
</body>
</html>
Webアプリケーションの最初の起動および2回目以降の起動で、アプリケーションの起動時間を改善するために、いくつかのオプションが使用できます。
|
ヒント: アプリケーションの開発中に、不必要な複雑さを回避するための最適化を無効化できます。 最適化は、最終的なパッケージ化ステージで使用します。 |
Java Web Startと埋込みの両方のWebアプリケーションが起動するたびに、更新が必要かどうかを確認するためのバックグラウンド更新チェックが行われます。 デフォルトでは、JavaおよびJavaFXアプリケーションは、アプリケーションの実行中にバックグラウンドで「遅延の」更新チェックを実行します。 これにより、アプリケーションの起動時に更新をチェックするために待機する時間がなくなります。 更新が見つかった場合、更新はアプリケーションの再起動後にのみ使用されます。 更新モード間で切り替えるには、Javaパッケージ化ツールの次の方法を使用します。
Antタスク: <fx:deploy>タスクのupdatemode属性を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS Xのjavapackagerツールのjavapackager -deployコマンドの-updatemodeオプションを参照してください。
NetBeans IDE: 「プロジェクト・プロパティ」の「デプロイメント」カテゴリで、「バックグラウンドでアプリケーションの更新をチェック(&C)」を選択します。
図5-3に示すように、デプロイメント記述子のコンテンツをHTMLページに埋め込むことができ、これはアプリケーションの起動に必要なネットワーク接続の数を減らすのに役立ちます。
アプリケーション更新チェックを実行するために、元のJNLPファイルがバックグラウンドでロードされます。
次の方法は、デプロイメント記述子のコンテンツの埋込みに使用できます。
Antタスク: <fx:deploy>タスクのembedjnlp属性を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS Xのjavapackagerツールのjavapackager -deployコマンドの-embedjnlpオプションを参照してください。
NetBeans IDE: デフォルトでコンテンツが埋め込まれます。
アプリケーションに署名する場合、このオプションは、JARファイルの署名に使用される証明書の詳細のコピーをJNLPファイルに埋め込みます。 図5-4に示すように、ユーザーが権限を承認する必要がある場合、アプリケーションJARファイルのロード中に、後にセキュリティ・プロンプトが続くこの証明書が表示されます。
次の方法は、デプロイメント記述子への署名証明書の埋込みに使用できます。
Antタスク: <fx:permissions>タスクのcachecertificates属性を参照してください。
Javaパッケージャ・ツール: WindowsまたはSolaris、LinuxおよびOS Xのjavapackagerツールのjavapackager -deployコマンドの-embedCertificatesオプションを参照してください。