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_DIR | VLX 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 啟動引數配置。