Proteger bibliotecas Java

El cifrado de bibliotecas corresponde al comando de bajo nivel encode. Solo genera el archivo protegido: no copia ningún entorno de ejecución ni crea scripts de arranque.

1. Cómo hacerlo en la interfaz gráfica

  1. En la página de tipo de aplicación, elija Cifrado de bibliotecas. Si necesita un paquete que pueda arrancarse directamente, elija en su lugar Aplicación Java, Spring Boot o Tomcat WAR.

    Elegir Cifrado de bibliotecas

  2. Seleccione el JAR de entrada, la versión de Java acorde al entorno donde se cargará y las plataformas de destino, y elija entre modo simple o avanzado. La salida de una biblioteca no contiene vlxjre, pero estas elecciones siguen determinando la identidad del entorno de ejecución ligada al archivo, así que no mezcle salidas de plataformas distintas solo para reducir el número de artefactos.

    Elegir el JAR de la biblioteca, la versión de Java, la plataforma de destino y el modo

  3. El modo simple analiza el JAR de entrada y aplica las recomendaciones de capa ZIP para escáneres y de sufijo de archivo que admite el cifrado de bibliotecas. Sigue cifrando todas las entradas .class del JAR y deja intactos los demás recursos.

  4. El modo avanzado permite configurar:

    • Desactivar JIT para métodos protegidos: los métodos protegidos se ejecutan solo en el intérprete.
    • Añadir capa ZIP para escáneres: ofrece recursos públicos y esbozos de metadatos a las herramientas que leen directamente el directorio central del ZIP.
    • Escaneo de compatibilidad...: comprueba riesgos como el acceso al ZIP, las suposiciones sobre sufijos, el uso de clases JNI y nativas, y la lectura de bytecode en tiempo de ejecución.
  5. En la página de salida, escriba el nombre completo del archivo de salida, normalmente con el sufijo .p4jx. Use .jar solo cuando una integración lo exija. El ajuste Sufijo del archivo de la página avanzada, o la recomendación del escaneo, alterna el nombre elegido entre .p4jx y .jar. Revise la versión de Java, las plataformas de destino, el ajuste del JIT y la capa para escáneres, y haga clic en Ejecutar protección.

    Una tarea de una sola plataforma escribe exactamente en la ruta que haya elegido. Si selecciona varias plataformas, la interfaz crea un subdirectorio por plataforma junto a ese archivo y escribe en cada uno el archivo correspondiente.

2. Cuándo usarlo

  • Para proteger JAR propios que forman parte de otra aplicación P4JX que usted controla;
  • para cargar un archivo P4JX desde un iniciador ya existente;
  • en integraciones avanzadas en las que gestiona usted mismo todo el directorio de entrega.

Si va a construir una aplicación ejecutable corriente, una aplicación Spring Boot o un despliegue de Tomcat, use el comando de empaquetado correspondiente.

3. Comandos básicos

p4j encode library.jar library.p4jx

También funciona la forma abreviada:

p4j library.jar library.p4jx

encode escribe exactamente el nombre de salida que indique, así que ambos comandos producen un archivo P4JX:

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

4. Capa ZIP

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

La capa contiene solo recursos públicos, directorios y esbozos de metadatos, para que sigan funcionando las herramientas que leen directamente el directorio central del ZIP. Ni expone los métodos protegidos reales ni convierte el archivo P4JX en un JAR corriente.

5. Requisitos del entorno de ejecución

El encode de bajo nivel no genera vlxjre, así que debe proporcionar usted un entorno de ejecución VLX acorde a la identidad usada al codificar. No conviene:

  • cargar el archivo con un OpenJDK u Oracle JDK corriente;
  • copiar lib/modules o bibliotecas nativas del paquete de otra versión;
  • emparejar el archivo con un entorno de ejecución de otra plataforma de destino, otra línea del JDK u otra ejecución de codificación.

En proyectos de entrega habituales, es preferible usar los comandos de empaquetado de nivel superior, que mantienen estas correspondencias por usted.

6. Licencia

Generar un archivo requiere una licencia emitida por el servidor, que queda incrustada en el resultado. Las cuentas con licencia y el modo de prueba pasan por la misma verificación del archivo. En entornos automatizados, nunca deje la contraseña fija en un script de tarea exportado.