Protección de aplicaciones JavaFX

JavaFX está disponible tanto para aplicaciones Java normales como para aplicaciones de escritorio Spring Boot. El runtime reducido de P4JX no incluye JavaFX por defecto, por lo que debe activarse de forma explícita durante el empaquetado o mediante recomendaciones de compatibilidad.

1. Operaciones de GUI

  1. Para aplicaciones JavaFX normales, seleccione Java Application en la página de tipo de aplicación; para aplicaciones de escritorio JavaFX que utilizan un contenedor Spring, seleccione Spring Boot. Library Encryption solo genera un archivo de protección y no puede reemplazar el empaquetado de una aplicación JavaFX.

    Seleccione Java Application o Spring Boot

  2. Seleccione el JAR de entrada, Versión de Java incluida en el paquete y la plataforma de destino, y luego elija entre el modo simple o el modo avanzado. Los recursos de JavaFX se obtienen por separado para cada versión de Java y plataforma de destino; las tareas multiplataforma generarán paquetes de salida independientes entre sí.

    Seleccione la entrada, la versión de Java, la plataforma de destino y el modo

  3. En el modo simple, si el análisis de compatibilidad detecta referencias a javafx.* o dependencias de JavaFX, indicará en los resultados los motivos de los ajustes y activará automáticamente JavaFX; si se detecta javafx.scene.web, también se incluirá WebView. El análisis es un análisis heurístico estático, por lo que aún se debe revisar el resumen de JavaFX al acceder a la página de resultados.

  4. En el modo avanzado, marque Bundle JavaFX into the packaged runtime en la pestaña JavaFX runtime y luego seleccione la estrategia para WebView:

    • Auto: Se determina automáticamente según si la aplicación hace referencia a javafx.scene.web.
    • Include: Incluir obligatoriamente WebView (fx-webkit);
    • Exclude: Excluir obligatoriamente WebView.

    El punto de entrada para las aplicaciones Java comunes es el siguiente:

    En los parámetros avanzados de la aplicación Java normal, seleccione el entorno de ejecución JavaFX

    Las aplicaciones de escritorio de Spring Boot utilizan la pestaña del mismo nombre:

    Seleccione el entorno de ejecución de JavaFX en los parámetros avanzados de Spring Boot

  5. Después de seleccionar la carpeta de salida, confirme que JavaFX aparezca como ya integrado en el resumen de parámetros y que el estado de WebView sea el esperado; a continuación, haga clic en Run protection. Una vez generado, utilice los scripts de inicio incluidos en el paquete para verificar las ventanas, recursos FXML, CSS/imágenes y WebView en cada plataforma objetivo.

Los materiales de WebView ocupan aproximadamente 40 MB; si no se utilizan, puede elegir Exclude para reducir el tamaño del paquete. Para conocer el significado de los demás ajustes en la interfaz avanzada, consulte Configuración del modo avanzado de Protector4J y Configuración de Spring Boot.

2. Obtención en línea mediante CLI

p4j javaapp fx-app.jar dist --javafx

Spring Boot JavaFX:

p4j springboot fx-boot.jar dist --javafx

Incluir o excluir obligatoriamente WebView:

--javafx-webview
--no-javafx-webview

La herramienta obtiene los materiales correspondientes desde los sitios de descarga públicos de la región actual, en función de la línea de entrenamiento y la plataforma Java objetivo. Ni la descarga de JavaFX ni la de VLX JRE requieren que se proporcione la clave de almacenamiento en la nube al cliente.

3. Materiales sin conexión

La CLI admite directorios locales:

p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx

El directorio puede contener:

  • fx-core.tar.gz junto con fx-webkit.tar.gz, que es opcional; o
  • Un árbol de archivos de JavaFX desplegado, con lib/ como raíz.

La GUI no ofrece la opción de seleccionar un directorio local de JavaFX; para escenarios sin conexión, utilice la CLI.

4. FXML

Si la aplicación utiliza FXMLLoader, el análisis de compatibilidad recomendará activar el overlay ZIP del escáner:

p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner

Los recursos relacionados con FXML, la firma de los controladores y el escaneo del framework requieren pruebas de inicio reales en la plataforma objetivo.

5. Java 8 y Java 11+

  • Java 8 utiliza jfxrt.jar y un modelo de directorio de extensiones; por lo general, no se necesitan parámetros de módulo al generar scripts.
  • Java 11+ emplea JAR de JavaFX modular; al generar scripts, se establecen automáticamente un path de módulo específico y --add-modules.

Siempre se deben utilizar run.sh, run.command o run.bat generados, y no se debe usar todo vlxjre/lib como path de módulo por cuenta propia.

6. Detección automática de límites

El detector escanea sus propias referencias a clases y determina si se trata de JavaFX según el nombre del archivo JAR de dependencia. No escanea en profundidad el bytecode de todas las dependencias de terceros para evitar clasificar erróneamente integraciones opcionales de JavaFX como uso real.

Si JavaFX se incluye de forma oculta en una dependencia cuyo nombre no indica que contiene JavaFX, el escaneo automático podría pasar por alto casos; en tales situaciones, se debe utilizar explícitamente --javafx.

7. Recomendaciones sobre el alcance de protección

  • Para determinar si las subclases de JavaFX Application, los controladores FXML y los modelos de propiedades están protegidos, se deben seguir los resultados de pruebas reales en la versión específica de Java.
  • Las clases de enlace que permiten acceso directo mediante JNI/native deben mantenerse como clases comunes.
  • Primero, utilice el modo simple o --compat-scan, y luego realice pruebas de regresión para la apertura de ventanas, la carga de FXML, los recursos CSS/imágenes, WebView y las bibliotecas nativas de la plataforma.