通常のJavaアプリケーションの保護

javaappは、メインクラスを持つ通常のJavaアプリケーション用です。これにより、保護されたアーカイブ、ターゲットプラットフォーム用のVLX JRE、および起動スクリプトが生成されます。

1. GUI操作

  1. アプリケーションタイプページでJava Applicationを選択します。

    Javaアプリケーションを選択する

  2. 入力用のJARファイル、同梱されているJavaバージョン、およびターゲットプラットフォームを選択し、シンプルモードまたはアドバンスドモードを選びます。

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

  3. アドバンスドモードを使用する場合は、必要に応じてMain classに情報を入力し、JVMパラメータやJavaFX、除外規則を設定します。シンプルモードではこのページはスキップできます。各オプションの意味についてはProtector4Jの高度なモード設定を参照してください。

    通常のJavaアプリケーションの高度なパラメータを設定する

  4. 出力ディレクトリを選択し、パラメータの要約を確認した後、Run protectionをクリックします。

    出力先のディレクトリを選択し、『保護』を実行します

2. CLIの例

Manifestに正しいMain-Classが含まれている場合:

p4j javaapp app.jar dist

ManifestにMain-Classが含まれていない、または別の起動クラスを使用する必要がある場合は、--mainを通じて指定します:

p4j javaapp app.jar dist --main com.example.Main

起動クラスとJVMパラメータの両方を指定する場合:

p4j javaapp app.jar dist \
  --main com.example.Main \
  --jvm-option -Xms512m \
  --jvm-option -Xmx2g

選択的な保護:

p4j javaapp app.jar dist \
  --protect 'com.example.core.**' \
  --exclude 'com.example.core.dto.**'

互換性スキャンと自動的な適用提案:

p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply

これら2つのオプションは同時に使用できず、その違いは以下の通りです:

オプション動作使用時期
--compat-scan入力されたJARのみをスキャンし、リスクや設定上の推奨事項を出力した後に終了する。エンコードは行わず、distも生成しないため、出力ディレクトリは不要である。アプリケーションを初めて保護したり、依存関係をアップグレードしたり、保護範囲を変更した後、または互換性の問題を調査する際に、まずこのコマンドを使ってレポートを確認する。
--compat-applyスキャン後に自動的に保守的な推奨事項を統合し、その後エンコードを続けて出力を生成するため、必ず出力ディレクトリを指定する必要がある。スキャン結果を確認し、自動的に提案された事項を受け入れた場合に、このコマンドを使ってパッケージングを完了する。また、ルールが既に検証済みの繰り返しビルドやCIプロセスにも使用できる。

javaappおよび--compat-applyでは、スキャン結果に基づいて除外クラスを追加したり、ZIP overlay、JavaFX、アーカイブのサフィックスといったオプションを調整したりできる。後者の3つのオプションについては、コマンドラインで明示的に指定された値が優先され、推奨される除外クラスはデフォルトで明示的に指定された--excludeと統合される。自動的に除外クラスを追加されたくない場合は、--no-compat-excludesも同時に指定できる。スキャナーは静的なヒューリスティック分析のみを行うため、コードを修正が必要な問題は--compat-applyによって自動的には修正されず、生成後も対象プラットフォームでのリグレッションテストが必要である。

その他のCLIコマンド、全てのオプション、環境変数、自動化の例については、CLIパラメータの参考情報を参照してください。

3. 出力構造

dist/
├── app.p4jx              # または --archive-suffix、jar から app.jar が生成される
├── vlxjre/               # アーカイブおよびターゲットプラットフォームに適合したランタイム
├── lib/                  # Manifest、Class-Path に依存し、任意で使用可能
├── run.sh
├── run.command
├── run.bat
└── README.md

classでないリソースはP4JXの公開リソースビューに保存される。保護されたclassリソースはスキャナーに対してメタデータスタブのみが表示され、実際のメソッド本体はVLXランタイムによってのみ読み込める。

4. 起動

./run.sh [アプリケーションパラメータ...]

Windows:

run.bat [アプリケーションパラメータ...]

出力ディレクトリ内のvlxjreをシステムのJREで置き換えてはいけない。手動で起動する場合は、生成スクリプトをテンプレートとしてクラスパス、VMパラメータ、JavaFXモジュールパラメータをそのまま保持すること。

Windowsターゲットをパッケージ化する際には、追加でネイティブな起動プログラムを生成することもでき、ダブルクリックするだけで実行可能です。これは起動スクリプトと共存し、詳細はWindows EXE起動ツールの生成を参照してください。

JVM起動パラメータ

パッケージ化時には、GUIのJVM startup optionsにて1行に1つのパラメータを入力するか、CLIで繰り返し使用することができます。

--jvm-option -Xms512m --jvm-option -Xmx2g

デプロイ後に現在のディレクトリを永続的に変更する:

  • macOS/Linuxの場合はrun.shを編集し、APP_JAVA_OPTSの判断処理の前にJVM_OPTS+=("-Xms512m" "-Xmx2g")を追加します。run.commandは同じrun.shを呼び出します。
  • Windowsの場合はrun.batを編集し、APP_JAVA_OPTSの判断処理の前にset "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g"を追加します。

一時的なパラメータはAPP_JAVA_OPTSを通じて注入できます。完全な例と注意事項はJVM起動パラメータの設定を参照してください。手動でスクリプトを修正した場合、再パッケージ化時に上書きされます。

5. 保護範囲の推奨事項

デフォルトの「保護されたアプリケーション」クラスです。本番プロジェクトでは、自社のビジネスパッケージを明示的に指定することを推奨します:

--protect 'com.mycompany.product.**'

通常は除外すべきものです:

  • Jacksonによる直接のシリアライズ/デシリアライズ対象となるDTOやrecordクラス;
  • JNIによってフィールドやメソッドにアクセスされるクラス;
  • ORM、依存注入、プロキシフレームワークのために書き換えが必要なクラス;
  • サードパーティ製ライブラリやオープンソースフレームワーク;
  • カスタムのClassLoaderによってバイト配列から再定義する必要があるクラス。

6. .p4jxおよび.jarというサフィックスを持つもの

p4j javaapp app.jar dist --archive-suffix jar

このオプションはファイル名のみを変更し、アーカイブの内容は依然としてP4JXのままです。サードパーティのコンポーネントがURLやファイル名に.jarを硬直的にコード化している場合にのみ使用してください。これによってアーカイブが通常のZIP/JARに変わることはありません。