保护 Java 类库

类库加密对应底层的 encode 命令。它只生成受保护归档,不复制运行时,也不生成启动脚本。

1. GUI 操作

  1. 在应用类型页面选择类库加密。如果你需要的是一个能直接启动的交付包,应改选 Java 应用Spring BootTomcat WAR

    选择类库加密

  2. 选择输入 JAR、与实际加载环境一致的 Java 版本,以及目标平台,然后选择简单模式或高级模式。类库输出不携带 vlxjre,但这些选择仍然决定了归档所绑定的运行时身份,因此不要为了减少产物数量而把不同平台的输出混用。

    选择类库 JAR、Java 版本、目标平台和模式

  3. 简单模式会扫描输入 JAR,并应用类库加密所支持的扫描器 ZIP 覆盖层和归档后缀建议。它仍然会加密输入 JAR 中的所有 .class 条目,其它资源保持原样。

  4. 高级模式可以配置:

    • 对受保护方法禁用 JIT:让受保护方法只在解释器中执行;
    • 追加扫描器 ZIP 覆盖层:向直接解析 ZIP 中央目录的工具提供公开资源和元数据桩;
    • 兼容性扫描…:检查 ZIP 访问、后缀假设、JNI 与原生类使用、运行时读取字节码等风险。
  5. 在输出页填写完整的输出文件名,通常使用 .p4jx 后缀;只有当集成方硬性要求 .jar 时才改用 .jar。高级页的归档后缀设置或扫描建议,会在 .p4jx.jar 之间切换已选的文件名。复核 Java 版本、目标平台、JIT 设置和扫描器覆盖层,然后点击运行保护

    单平台任务会精确写入你所选的文件路径。选择多个目标平台时,GUI 会在该文件所在目录下按平台建立子目录,把对应的归档分别写进去。

2. 适用场景

  • 保护属于其它受控 P4JX 应用一部分的自有 JAR;
  • 由已有的启动器装载 P4JX 归档;
  • 需要自行管理完整交付目录的高级集成。

如果你要构建的是可直接运行的普通应用、Spring Boot 应用或 Tomcat 部署包,请改用对应的打包命令。

3. 基本命令

p4j encode library.jar library.p4jx

也可以使用简写形式:

p4j library.jar library.p4jx

encode 会精确写入你给出的输出文件名,因此下面两条命令生成的都是 P4JX 归档:

p4j encode library.jar library.p4jx
p4j encode library.jar library.jar

4. ZIP 覆盖层

p4j encode library.jar library.p4jx \
  --zip-overlay scanner

覆盖层只包含公开资源、目录和元数据桩,用于让直接解析 ZIP 中央目录的工具仍然可用。它不会暴露真实的受保护方法,也不会把 P4JX 归档变成普通 JAR。

5. 运行时要求

底层的 encode 不生成 vlxjre,因此你必须自行提供与编码时身份匹配的 VLX 运行时。不要:

  • 用普通的 OpenJDK 或 Oracle JDK 加载归档;
  • 从其它版本的输出包中复制 lib/modules 或原生库;
  • 把归档与来自不同目标平台、不同 JDK 训练线或不同编码任务的运行时搭配使用。

对于普通交付项目,优先使用高层打包命令,它会自动维护好这些对应关系。

6. 许可

生成归档时必须成功取得服务器签发的许可,并嵌入结果中。正式账号和试用模式走的是同一套归档校验流程。在自动化环境中,绝不要把密码硬编码在导出的任务脚本里。