CLI リファレンス

このページの例では、インストール後に使える p4j コマンドを使います。Windows の GUI は .exe から、macOS の GUI は .dmg 内の Protector4J.app からインストールしますが、GUI のインストール方法によって以下の CLI 構文が変わることはありません。インストーラーが CLI を PATH に追加しなかった場合は、Protector4J のインストールディレクトリにあるコマンドラインの入口から実行してください。

p4j --help

1. コマンド

p4j encode     <input.jar> <output.p4jx|output.jar> [オプション]
p4j javaapp    <input.jar> <出力ディレクトリ> [オプション]
p4j springboot <input.jar> <出力ディレクトリ> [オプション]
p4j tomcat     <input.war> <出力ディレクトリ> [オプション]

低レベルの encode はコマンド名を省略することもできます。

p4j input.jar output.p4jx [オプション]

起動レベルのオプションはパッケージング対象を選びます。コマンド名の前に置くことも、コマンド全体の末尾にまとめて置くこともできます。GUI がエクスポートするコマンドラインは末尾に置く書き方です。

オプション説明
--java-version <N>同梱する Java トレイン:8、11、17、21、25。既定は 21
--target-platform <id>[,<id>...]1 つ以上のターゲットプラットフォーム。カンマ区切り、またはオプションの繰り返しで指定します。既定は現在のプラットフォーム
--create-new-folder出力ディレクトリの中に p4jx-xxxxxxxx サブディレクトリを新規作成します。javaappspringboottomcat のみ対応

例:

p4j --java-version 21 --target-platform linux-x64 springboot app.jar dist
p4j springboot app.jar dist --java-version 21 --target-platform linux-x64

この 2 つは同じ意味です。起動レベルのオプションをパッケージャーのオプションの間に挟むことはできません。挟むと未知のパッケージャーオプションとして扱われ、エラーになります。

2. 共通オプション

オプション説明
--jre-home <path>指定した P4JX の最終 JRE ランタイムから鍵を導出します。上位のパッケージングコマンドはこのランタイムもコピーします
--keys <keys.json>明示的な秘密鍵ファイルを使います。診断と内部処理専用で、アプリケーションと一緒に配布しないでください
--no-jit保護対象メソッドを JIT に渡さず、インタプリタで実行します
--zip-overlay off|scannerスキャナ ZIP 互換ビューを無効化または有効化します。既定は off
--compat-scanスキャンのみを行って終了します。出力引数は不要です
--compat-applyスキャンして保守的な推奨を適用し、そのままエンコードします
--no-compat-excludes--compat-apply と併用し、推奨される除外を自動追加しません
--native-compat jxbrowserjavaappspringboot のみ。同梱の JxBrowser の許可を要求します。バージョン、プラットフォーム、5 層のハッシュは引き続き完全に検証され、他の値、パス、ハッシュは受け付けません
--account-email <email>ライセンスアカウントのメールアドレス
--account-password <password>ライセンスアカウントのパスワード
--app-id <id>アプリケーション識別子
--license-expires-in <sec>要求する試用期間 (秒)。サーバー側のポリシーの範囲内

上位のパッケージングコマンドでは、さらに次が使えます。

オプション説明
--archive-suffix p4jx|jar生成するアーカイブのサフィックス。既定は p4jx。内部フォーマットは変わりません
--jvm-option <option>macOS、Linux、Windows の起動スクリプトに書き込みます。オプションごとに 1 回使い、繰り返し指定できます。Windows EXE を有効にすると、同じ内容が EXE にも組み込まれます

3. encode

p4j encode input.jar output.p4jx [オプション]
オプション説明
--bind-launcher <jar>ランチャー JAR の SHA-256 を計算して結び付けます
--launcher-sha256 <hex>ランチャーの SHA-256 を直接渡します。高度な組み込み向け
--runtime-major <N>リソースビューとマルチリリースの平坦化のターゲット。既定は 21

--bind-launcher--launcher-sha256 は併用できません。

4. javaapp

p4j javaapp input.jar 出力ディレクトリ [オプション]
オプション説明
--main <class>起動するメインクラス
--protect <rules>保護するクラスとパッケージのルール。カンマ区切り。既定はすべてのクラス
--exclude <rules>保護範囲から外すルール
--javafx [<dir>]JavaFX を有効にします。ローカルのコンポーネントディレクトリを指定できます
--javafx-webview常に WebView を含めます
--no-javafx-webviewWebView を含めません
--no-javafxJavaFX を明示的に無効化します
--native-compat jxbrowser同梱ディレクトリと完全に一致する JxBrowser の IPC ライブラリに ATTACH_THREAD を書き込みます。Java 17、21、25 のみ

5. springboot

p4j springboot input.jar 出力ディレクトリ [オプション]
オプション説明
--main <class>Spring Boot のメインクラス。既定ではマニフェストから読み取ります
--protect <rules>BOOT-INF/classes 内の一致するクラスを保護します
--exclude <rules>一致するクラスやパッケージを保護対象から外します
--protect-lib <globs>BOOT-INF/lib 内の一致する JAR を保護します。カンマ区切り
--layout p4jx-fat|fat|separate出力レイアウト。既定は p4jx-fat
--javafx [<dir>]JavaFX を有効にします。ローカルのコンポーネントディレクトリを指定できます
--javafx-webview常に WebView を含めます
--no-javafx-webviewWebView を含めません
--no-javafxJavaFX を明示的に無効化します
--native-compat jxbrowserjavaapp と同じです。ネストした BOOT-INF/lib も同じスキャナが対象にします

6. tomcat

p4j tomcat input.war 出力ディレクトリ [オプション]
オプション説明
--exclude <rules>WEB-INF/classes 内の一致するクラスやパッケージを保護対象から外します
--context </path>コンテキストパス。既定は /app
--append-app既存の P4JX Tomcat パッケージにアプリケーションを追加します
--tomcat-version auto|9|10自動検出、またはバージョンの明示。CLI の既定は auto
--precompile-jspJSP を必ず事前コンパイルします
--no-precompile-jspJSP の事前コンパイルを無効化します

7. Windows EXE のオプション

javaappspringboottomcat では、ネイティブ Windows ランチャーを追加で生成できます。ターゲットプラットフォームに windows-x64windows-x86windows-aarch64 のいずれかが含まれている必要があります。

オプション説明
--windows-exeWindows アプリケーション EXE を生成します。指定しなければ生成されません
--exe-name <name>EXE のファイル名。既定は入力ファイル名、tomcat のパッケージでは tomcat
--exe-mode <mode>console (既定) または gui
--exe-icon <ico>任意の Windows アイコン (.ico 形式)
--exe-file-version <a.b.c.d>PE のファイルバージョン。1〜4 個の数値で、各値は 0〜65535。空欄は 0.0.0.0
--exe-product-version <a.b.c.d>PE の製品バージョン。規則は同じ
--exe-company <text>会社名
--exe-product <text>製品名
--exe-description <text>ファイルの説明
--exe-copyright <text>著作権表示

--exe-* のいずれかを指定すると EXE の生成が自動的に有効になります。複数プラットフォームのタスクでは Windows のパッケージにのみ EXE が生成され、他のプラットフォームは通常どおり生成されて起動スクリプトが残ります。

p4j --target-platform windows-x64 javaapp app.jar dist --windows-exe --exe-name MyApp.exe --exe-mode gui

詳しい説明、実行時の挙動、コード署名の手順は Windows EXE ランチャーの生成を参照してください。

8. ルールの書き方

com.example.SecretService   単一のクラス
com.example.service         このパッケージのみ
com.example.service.*       このパッケージのみ
com.example.service.**      このパッケージとすべてのサブパッケージ
com/example/Secret.class    クラスエントリのパス

複数のルールはカンマで区切ります。* を含むルールは、シェルに展開されないよう引用符で囲んでください。

--protect 'com.example.**' --exclude 'com.example.dto.**,com.example.config.**'

9. 環境変数

環境変数は、CI ジョブ、コンテナー、連続して実行する複数のコマンドで共通の既定値を設定するのに向いています。ある 1 回のパッケージングを記録し再現したい場合は、値を CLI オプションとして明示するほうが確実です。

環境変数対応する CLI オプション説明
P4JX_RUNTIME_JAVA_VERSION--java-version <N>上位のパッケージングで使う Java トレイン:8、11、17、21、25
P4JX_RUNTIME_PLATFORM--target-platform <id>単一のターゲットプラットフォーム。複数を一度にパッケージングする場合は CLI オプションを使ってください
P4JX_RUNTIME_CACHE_DIRなしVLX JRE のダウンロードキャッシュディレクトリを上書きします
APP_JAVA_OPTS--jvm-option と対比生成したアプリケーションの実行時に JVM オプションを一時的に追加します。--jvm-option はパッケージング時に起動スクリプトへ書き込むもので、両者は同じではありません

環境変数と対応する CLI オプションの両方を設定した場合は、明示した CLI オプションが優先されます。環境変数は引き続き完全にサポートされているため、既存の自動化スクリプトはそのまま使えます。

たとえば、現在のシェルで後続の複数のパッケージングコマンドに共通のターゲットを設定する場合:

export P4JX_RUNTIME_JAVA_VERSION=21
export P4JX_RUNTIME_PLATFORM=linux-x64

p4j springboot service-a.jar release/service-a
p4j springboot service-b.jar release/service-b

パッケージャーの JAR を直接起動する高度な使い方では、同等の Java システムプロパティも使えます。

-Dp4jx.runtime.java.version=<N>
-Dp4jx.runtime.platform=<platform>
-Dp4jx.runtime.cache.dir=<dir>

10. 自動化の例

p4j --java-version 21 \
  --target-platform linux-x64 \
  springboot build/app.jar release/linux-x64 \
  --compat-apply \
  --protect 'com.example.service.impl.**' \
  --exclude 'com.example.dto.**,com.example.config.**' \
  --jvm-option -Xms1g \
  --jvm-option -Xmx2g \
  --app-id com.example.app

明示的に指定した保護、除外、レイアウトのオプションは自動推奨より優先されます。最終的なオプション、入力ファイルの SHA-256、ツールのバージョンは、リリースの来歴として記録しておくことをおすすめします。

GUI と CLI の例、および run.shrun.bat、Tomcat の起動スクリプト、Windows PowerShell の編集方法は JVM スタートアップオプションを参照してください。