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> [options]
p4j javaapp    <input.jar> <output-dir> [options]
p4j springboot <input.jar> <output-dir> [options]
p4j tomcat     <input.war> <output-dir> [options]

低層 encode 也可省略命令名:

p4j input.jar output.p4jx [options]

2. 通用選項

選項說明
--no-jit禁止保護方法 JIT,改為直譯器執行
--zip-overlay off|scanner關閉或附加掃描器 ZIP 相容檢視,預設 off
--compat-scan只掃描並退出;不要求輸出引數
--compat-apply掃描、應用保守建議,然後繼續編碼
--no-compat-excludes配合 --compat-apply,不自動追加建議的排除類
--account-email <email>許可賬號郵箱
--account-password <password>許可賬號密碼
--app-id <id>指定應用標識
--license-expires-in <sec>請求試用有效秒數,受伺服器策略約束

高層打包命令支援:

選項說明
--archive-suffix p4jx|jar生成歸檔的檔案字尾,預設 p4jx;不改變內部格式
--jvm-option <option>寫入 macOS/Linux 和 Windows 生成啟動指令碼;每個引數使用一次,可重複

3. encode

p4j encode input.jar output.p4jx [options]
選項說明
--runtime-major <N>指定資源檢視/Multi-Release 展平目標,預設 21

4. javaapp

p4j javaapp input.jar output-dir [options]
選項說明
--main <class>指定啟動主類
--protect <rules>要保護的類/包規則,逗號分隔;預設全部應用類
--exclude <rules>從保護範圍中排除
--javafx [<dir>]啟用 JavaFX;可選本地素材目錄
--javafx-webview強制包含 WebView
--no-javafx-webview強制排除 WebView
--no-javafx顯式關閉 JavaFX

5. springboot

p4j springboot input.jar output-dir [options]
選項說明
--main <class>指定 Spring Boot 主類;預設讀取 Manifest
--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-webview強制排除 WebView
--no-javafx顯式關閉 JavaFX

6. tomcat

p4j tomcat input.war output-dir [options]
選項說明
--exclude <rules>排除 WEB-INF/classes 中的類或包
--context </path>context path,預設 /app
--append-app把應用加入已有 P4JX Tomcat 包
--tomcat-version auto|9|10自動檢測或強制版本,CLI 預設 auto
--precompile-jsp強制預編譯 JSP
--no-precompile-jsp禁止預編譯 JSP

7. 規則語法

com.example.SecretService   單個類
com.example.service         直接包匹配
com.example.service.*       直接包匹配
com.example.service.**      包及全部子包
com/example/Secret.class    class 條目路徑

多個規則用逗號分隔,shell 中包含 * 時應加引號:

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

8. 環境變數

變數說明
P4JX_RUNTIME_JAVA_VERSION高層打包使用的 Java 訓練線:8/11/17/21/25
P4JX_RUNTIME_PLATFORM目標平臺 ID
P4JX_RUNTIME_CACHE_DIRVLX JRE 下載快取目錄
APP_JAVA_OPTS執行生成應用時臨時追加 JVM 引數;macOS/Linux 與 Windows 均支援

Java 系統屬性等價項適合直接啟動編碼器 JAR的高階場景:

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

9. 自動化示例

P4JX_RUNTIME_JAVA_VERSION=21 \
P4JX_RUNTIME_PLATFORM=linux-x64 \
p4j 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 和工具版本記錄為釋出 provenance。

GUI、CLI、直接編輯 run.sh/run.bat、Tomcat 啟動指令碼以及 Windows PowerShell 示例見 JVM 啟動引數配置