JavaFXアプリケーションの保護

通常のJavaアプリケーションやSpring BootデスクトップアプリケーションでもJavaFXを有効にできます。P4JXの軽量ランタイムにはデフォルトでJavaFXが含まれておらず、パッケージ作成時に明示的に、または互換性スキャンの結果に基づいて有効にする必要があります。

1. GUI操作

  1. 通常のJavaFXアプリケーションの場合はアプリケーションタイプページでJava Applicationを選択し、Springコンテナを使用するJavaFXデスクトップアプリケーションの場合はSpring Bootを選択します。Library Encryptionは保護されたアーカイブのみを生成し、JavaFXアプリケーションのパッケージ作成には代わりません。

    Java Application または Spring Boot を選択してください

  2. 入力用のJARファイル、同梱されているJavaバージョン、およびターゲットプラットフォームを選択した後、シンプルモードまたはアドバンスドモードを選びます。JavaFXのコンポーネントは、各ターゲットとなるJavaバージョンやプラットフォームごとに別々に取得され、マルチプラットフォームのタスクの場合は相互に独立した出力パッケージが生成されます。

    入力方法、Javaのバージョン、ターゲットプラットフォーム、およびモードを選択します

  3. シンプルモードを使用している場合、互換性スキャンでjavafx.*の参照やJavaFXへの依存関係が見つかると、スキャン結果に調整の理由が示され、自動的にJavaFXが有効になります。またjavafx.scene.webが見つかった場合はWebViewも含まれます。このスキャンは静的なヒューリスティック分析であり、出力ページに移った後もJavaFXに関する概要を再度確認する必要があります。

  4. アドバンスドモードを使用する場合は、JavaFX runtimeタブでBundle JavaFX into the packaged runtimeにチェックを入れ、次にWebViewのポリシーを選択します。

    • Auto:アプリケーションがjavafx.scene.webを参照しているかどうかに基づいて自動的に判断されます。
    • Include:WebViewの含めることを強制する(fx-webkit);
    • Exclude:WebViewを含めないように強制する。

    通常のJavaアプリケーションのエントリポイントは以下の通りです:

    通常のJavaアプリケーションの詳細設定で、「JavaFX runtime」を選択します。

    Spring Bootデスクトップアプリケーションは同名のタブを使用します:

    Spring Bootの高度なパラメータで、JavaFX runtimeを選択します

  5. 出力ディレクトリを選択した後、パラメータの要約でJavaFXが組み込まれていること、WebViewの状態が期待通りであることを確認し、次にRun protectionをクリックします。生成後は、パッケージ内の起動スクリプトを使用して、各ターゲットプラットフォーム上でウィンドウ、FXML、CSS/画像リソース、WebViewを検証します。

WebViewのサイズは約40MBで、使用しない場合はExcludeを選択してパッケージサイズを小さくできます。高度な設定画面にあるその他の設定の意味については、Protector4Jの高度なモード設定およびSpring Bootの設定を参照してください。

2. CLIはオンラインで入手可能

p4j javaapp fx-app.jar dist --javafx

Spring Boot JavaFX:

p4j springboot fx-boot.jar dist --javafx

WebViewの含めることまたは除外することを強制する:

--javafx-webview
--no-javafx-webview

このツールは、対象となるJavaトレーニングラインおよびプラットフォームに基づき、現在のエリア内にある公開ダウンロードサイトから対応する素材を取得します。JavaFXのダウンロードでもVLX JREのダウンロードでも、クラウドストレージキーをクライアントに渡す必要はありません。

3. オフライン素材

CLIではローカルディレクトリをサポートしています:

p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx

ディレクトリには以下のものを含めることができます:

  • fx-core.tar.gzとオプションのfx-webkit.tar.gz、または
  • 展開済みで、lib/をルートとするJavaFXファイルツリー。

GUIではローカルのJavaFXディレクトリの選択は提供されていません。オフライン環境ではCLIを使用してください。

4. FXML

アプリケーションがFXMLLoaderを使用している場合、互換性スキャンによってスキャナーのZIP overlayの有効化が推奨されます:

p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner

FXMLに関連するリソース、コントローラの署名、およびフレームワークのスキャンには、対象プラットフォーム上での実際の起動テストが必要です。

5. Java 8 および Java 11+

  • Java 8ではjfxrt.jar/拡張ディレクトリモデルが使用され、スクリプトの生成時にモジュールパラメータは通常不要です。
  • Java 11+ではモジュール化されたJavaFX JARが使用され、スクリプトの生成時に専用のmodule pathと--add-modulesが自動的に設定されます。

常に生成されたrun.shrun.command、またはrun.batを使用し、vlxjre/lib全体を自分でmodule pathとして扱ってはいけません。

6. 境界の自動検出

ディテクタは自身のクラス参照をスキャンし、依存しているJARファイルの名前からJavaFXかどうかを判断します。オプションのJavaFXインテグレーションを実際の使用と誤って判断しないよう、すべてのサードパーティ依存のバイトコードまで深くスキャンすることはありません。

JavaFXが名前からJavaFXであることが分からない依存ファイル内にシェードされている場合、自動スキャンでは見落としが生じる可能性があります。そのような場合は、明示的に--javafxを使用してください。

7. 保護範囲の推奨事項

  • JavaFX Applicationのサブクラス、FXML Controller、およびプロパティモデルを保護するかどうかは、対象となるJavaバージョンでの実際のテスト結果に基づいて判断する必要があります。
  • JNI/nativeによる直接アクセスが行われるブリッジクラスは、通常のクラスのままにしておくべきです。
  • まずシンプルモードまたは--compat-scanを使用し、その後でウィンドウの開始、FXMLの読み込み、CSS/画像リソース、WebView、およびプラットフォームのnativeライブラリについてリグレッションテストを行います。