Protección de aplicaciones Java comunes
javaapp se utiliza para aplicaciones Java comunes con clase principal. Genera un archivo archivado protegido, el VLX JRE de la plataforma de destino y un script de inicio.
1. Operaciones de GUI
-
En la página de tipo de aplicación, seleccione Java Application.

-
Elija el JAR de entrada, Versión de Java incluida en el paquete y la plataforma de destino, y seleccione el modo simple o el modo avanzado.

-
Al usar el modo avanzado, complete Main class según sea necesario y configure los parámetros de JVM, JavaFX y reglas de exclusión; en el modo simple se puede omitir esta página. La significación de cada opción se encuentra en Configuración del modo avanzado de Protector4J.

-
Elija la carpeta de salida, revise el resumen de parámetros y luego haga clic en Run protection.

2. Ejemplos de CLI
Cuando el Manifest ya contiene el valor correcto de Main-Class:
p4j javaapp app.jar dist
Si el Manifest no tiene Main-Class, o es necesario utilizar otro clase de inicio, se especifica a través de --main:
p4j javaapp app.jar dist --main com.example.Main
Se especifican al mismo tiempo la clase de inicio y los parámetros de JVM:
p4j javaapp app.jar dist \
--main com.example.Main \
--jvm-option -Xms512m \
--jvm-option -Xmx2g
Protección selectiva:
p4j javaapp app.jar dist \
--protect 'com.example.core.**' \
--exclude 'com.example.core.dto.**'
Análisis de compatibilidad y sugerencias automáticas de aplicación:
p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply
Estas dos opciones no se pueden usar simultáneamente; su diferencia es:
| Opciones | Comportamiento | Cuándo usarlo |
|---|---|---|
--compat-scan | Escanea únicamente el JAR de entrada, imprime los riesgos y las recomendaciones de configuración y luego se cierra; no realiza codificación ni genera dist, por lo que no se necesita un directorio de salida | Úsalo primero para ver los informes después de proteger una aplicación por primera vez, actualizar dependencias o ajustar el alcance de protección, así como al resolver problemas de compatibilidad |
--compat-apply | Después del escaneo, combina automáticamente las recomendaciones conservadoras y luego continúa con la codificación y generación de la salida, por lo que es necesario especificar un directorio de salida | Úsalo para finalizar el empaquetado una vez que se hayan leído los resultados del escaneo y se hayan aceptado las recomendaciones automáticas; también se puede utilizar en construcciones repetidas con reglas ya verificadas o en flujos CI |
Para javaapp y --compat-apply, se pueden agregar clases de exclusión según los resultados del escaneo, y ajustar opciones como ZIP overlay, JavaFX y el sufijo del archivo archivado. Para estas tres últimas opciones, prevalecen los valores especificados explícitamente en la línea de comandos; las clases de exclusión recomendadas se combinan por defecto con --exclude de forma explícita. Si no se desea agregar clases de exclusión automáticamente, se puede pasar también --no-compat-excludes. El escáner solo realiza un análisis heurístico estático; los problemas que requieren modificar el código no serán reparados automáticamente por --compat-apply, y aún será necesario realizar pruebas de regresión en la plataforma objetivo después de la generación
Para otras órdenes CLI, todas las opciones, variables de entorno y ejemplos de automatización, consulte Referencia de parámetros de la CLI.
3. Estructura de salida
dist/
├── app.p4jx # o --archive-suffix jar generan app.jar
├── vlxjre/ # Entorno de ejecución compatible con la plataforma de archivado y de destino
├── lib/ # Dependencias de Manifest Class-Path, opcionales
├── run.sh
├── run.command
├── run.bat
└── README.md
Los recursos que no son de tipo class se almacenan en la vista de recursos públicos de P4JX. Los recursos de class protegidos solo muestran stubs de metadatos al escáner; el cuerpo real de los métodos solo puede ser cargado por el entorno de ejecución VLX.
4. Iniciar
./run.sh [Parámetros de la aplicación...]
Windows:
run.bat [Parámetros de la aplicación...]
No reemplace vlxjre en el directorio de salida con el JRE del sistema. Si es necesario iniciarlo manualmente, mantenga su ruta de clases, parámetros de la VM y parámetros de módulos JavaFX utilizando el script de generación como plantilla.
Al empaquetar para Windows, también se puede generar un programa de inicio nativo adicional que se puede ejecutar con doble clic; coexiste con el script de inicio, véase Generar un iniciador EXE para Windows.
Parámetros de inicio de JVM
Durante el empaquetado, se puede ingresar un parámetro por línea en JVM startup options de la interfaz gráfica, o reutilizarlos en la CLI:
--jvm-option -Xms512m --jvm-option -Xmx2g
Modificar permanentemente el directorio actual después del despliegue:
- macOS/Linux: edite
run.she inserteJVM_OPTS+=("-Xms512m" "-Xmx2g")antes de la verificación enAPP_JAVA_OPTS;run.commandllamará a la misma versión derun.sh. - Windows: edite
run.bate inserteset "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g"antes de la verificación enAPP_JAVA_OPTS.
Los parámetros temporales se pueden introducir a través de APP_JAVA_OPTS. Ejemplos completos y consideraciones importantes se encuentran en Configuración de parámetros de inicio de la JVM. Las modificaciones hechas manualmente en los scripts se sobrescribirán al volver a empaquetar.
5. Recomendaciones sobre el alcance de protección
Clase de aplicación con protección predeterminada. Para proyectos en producción, se recomienda especificar explícitamente los paquetes de negocio propios:
--protect 'com.mycompany.product.**'
Por lo general, se deben excluir:
- DTO y record para serialización/deserialización directa con Jackson;
- Clases cuyos campos o métodos son accedidos mediante JNI;
- Clases que requieren reescritura en frameworks ORM, de inyección de dependencias o de proxy;
- Bibliotecas de terceros y frameworks de código abierto;
- Clases que deben ser redefinidas a partir de arrays de bytes por un ClassLoader personalizado.
6. Sufijos .p4jx y .jar
p4j javaapp app.jar dist --archive-suffix jar
Esta opción solo modifica el nombre del archivo; el contenido del archivo comprimido sigue siendo P4JX. Debe utilizarse únicamente cuando componentes de terceros tengan codificado de forma fija el valor .jar en la URL o en el nombre del archivo; no convierte el archivo comprimido en un ZIP/JAR ordinario.