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

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

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

-
出力ディレクトリを選択し、パラメータの要約を確認した後、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に変わることはありません。