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