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 启动参数配置