通常の Java アプリケーションの保護
javaapp は、メインクラスを持つ通常の Java アプリケーションを扱います。保護済みアーカイブ、ターゲットプラットフォームごとの VLX JRE、起動スクリプトを生成します。
1. GUI での操作
-
アプリケーションの種類のページで Java アプリケーションを選びます。

-
入力 JAR、同梱する Java バージョン、ターゲットプラットフォームを選び、シンプルモードか詳細設定モードかを選びます。

-
詳細設定モードでは、必要に応じてメインクラスを入力し、JVM スタートアップオプション、JavaFX の設定、除外ルールを設定します。シンプルモードではこのページを省略します。各オプションの意味は Protector4J 詳細設定モードを参照してください。

-
出力ディレクトリを選び、サマリーを確認して保護を実行をクリックします。

2. CLI の例
マニフェストに正しい Main-Class がすでに宣言されている場合:
p4j javaapp app.jar dist
マニフェストに 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 オーバーレイ、JavaFX、アーカイブサフィックスを調整できます。この 3 つについては、コマンドラインで明示した値が優先されます。推奨される除外は、既定で明示した --exclude にマージされます。自動追加を望まない場合は --no-compat-excludes も一緒に指定してください。スキャナは静的なヒューリスティック解析のみを行うため、ソース修正が必要な問題は --compat-apply では解決されず、パッケージング後もターゲットプラットフォームでの回帰テストが必要です。
その他の CLI コマンド、全オプション、環境変数、自動化の例は CLI リファレンスを参照してください。
3. 出力の構成
dist/
├── app.p4jx # --archive-suffix jar を使うと app.jar
├── vlxjre/ # アーカイブとターゲットプラットフォームに対応するランタイム
├── lib/ # マニフェストの Class-Path の依存関係 (任意)
├── run.sh
├── run.command
├── run.bat
└── README.md
クラス以外のリソースは、P4JX アーカイブの公開リソースビューに保存されます。保護対象クラスがスキャナに見せるのはメタデータスタブだけで、実際のメソッド本体は VLX ランタイムしか読み込めません。
4. 起動
./run.sh [アプリケーションの引数...]
Windows:
run.bat [アプリケーションの引数...]
出力ディレクトリの vlxjre をシステムの JRE で置き換えないでください。どうしても手動で起動する必要がある場合は、生成されたスクリプトを雛形として、クラスパス、VM オプション、JavaFX のモジュールオプションをそのまま引き継いでください。
Windows 向けにパッケージングする場合は、ダブルクリックで実行できるネイティブランチャーも生成できます。起動スクリプトと併存します。詳細は Windows EXE ランチャーの生成を参照してください。
JVM スタートアップオプション
パッケージング時に、GUI の JVM スタートアップオプションで 1 行に 1 つ入力するか、コマンドラインでオプションを繰り返し指定します。
--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 やレコード
- フィールドやメソッドに JNI からアクセスされるクラス
- ORM、DI コンテナー、プロキシフレームワークが書き換える必要のあるクラス
- サードパーティのライブラリとオープンソースのフレームワーク
- カスタム ClassLoader がバイト配列から再定義する必要のあるクラス
6. .p4jx と .jar のサフィックス
p4j javaapp app.jar dist --archive-suffix jar
このオプションはファイル名を変えるだけで、アーカイブの中身は P4JX のままです。サードパーティのコンポーネントが URL やファイル名に .jar をハードコードしている場合にのみ使ってください。アーカイブが通常の ZIP や JAR になるわけではありません。