Proteger aplicaciones JavaFX
JavaFX puede activarse tanto en aplicaciones Java corrientes como en aplicaciones de escritorio Spring Boot. El entorno de ejecución reducido de P4JX no incluye JavaFX de serie: hay que activarlo de forma explícita o dejar que lo haga el escaneo de compatibilidad.
1. Cómo hacerlo en la interfaz gráfica
-
Para una aplicación JavaFX sencilla, elija Aplicación Java en la página de tipo de aplicación. Para una aplicación de escritorio JavaFX construida sobre un contenedor de Spring, elija Spring Boot. El cifrado de bibliotecas solo produce un archivo protegido y no sustituye al empaquetado de una aplicación JavaFX real.

-
Seleccione el JAR de entrada, la versión de Java que se incluirá y las plataformas de destino, y elija entre modo simple o avanzado. Los componentes de JavaFX se obtienen por separado para cada versión de Java y plataforma, de modo que una tarea con varias plataformas produce un paquete de salida independiente para cada una.

-
En el modo simple, si el escaneo de compatibilidad encuentra referencias a
javafx.*o dependencias de JavaFX, lo activa automáticamente y explica el motivo en el resultado. Si además encuentrajavafx.scene.web, incluye también WebView. El escaneo es un análisis heurístico estático, así que revise de nuevo el resumen de JavaFX en la página de salida. -
En el modo avanzado, marque Incluir JavaFX en el runtime empaquetado en la pestaña Entorno de ejecución JavaFX y elija la estrategia para WebView:
- Automático (detectar javafx.scene.web): decide según si la aplicación hace referencia a
javafx.scene.web. - Incluir: incorpora siempre WebView (
fx-webkit). - Excluir: no lo incorpora nunca.
En una aplicación Java corriente, la pestaña se ve así:

Las aplicaciones de escritorio Spring Boot usan una pestaña con el mismo nombre:

- Automático (detectar javafx.scene.web): decide según si la aplicación hace referencia a
-
Tras elegir el directorio de salida, compruebe que el resumen indica JavaFX como incluido y que el estado de WebView es el esperado, y haga clic en Ejecutar protección. Una vez generado el paquete, use su script de arranque para verificar en cada plataforma de destino la ventana, el FXML, los recursos CSS e imágenes y WebView.
Los componentes de WebView ocupan unos 40 MB. Elija Excluir para reducir el tamaño del paquete si no los necesita. Los demás ajustes de las páginas avanzadas se explican en Ajustes del modo avanzado de Protector4J.
2. Obtener los componentes desde la línea de comandos
p4j javaapp fx-app.jar dist --javafx
Para Spring Boot con JavaFX:
p4j springboot fx-boot.jar dist --javafx
Para forzar la inclusión o la exclusión de WebView:
--javafx-webview
--no-javafx-webview
La herramienta descarga los componentes correspondientes desde el sitio público de descargas de su región, según la línea del JDK y la plataforma de destino. Ni la descarga de JavaFX ni la del VLX JRE requieren entregar al cliente una clave de almacenamiento en la nube.
3. Componentes sin conexión
La línea de comandos admite un directorio local:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
El directorio puede tener una de estas dos formas:
fx-core.tar.gzy, opcionalmente,fx-webkit.tar.gz;- un árbol de archivos de JavaFX ya extraído, con
lib/como raíz.
La interfaz gráfica no permite elegir un directorio local de JavaFX, así que use la línea de comandos cuando trabaje sin conexión.
4. FXML
Si la aplicación usa FXMLLoader, el escaneo de compatibilidad recomienda activar la capa ZIP para escáneres:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
Los recursos FXML, las firmas de los controladores y el escaneo del framework hay que comprobarlos arrancando realmente la aplicación en la plataforma de destino.
5. Java 8 frente a Java 11 y posteriores
- Java 8 usa
jfxrt.jary el modelo de directorios de extensión, así que los scripts generados no suelen necesitar opciones de módulo. - Java 11 y posteriores usan JAR modulares de JavaFX, y los scripts generados establecen una ruta de módulos propia junto con
--add-modules.
Arranque siempre con el run.sh, run.command o run.bat generados. No apunte usted mismo la ruta de módulos a todo vlxjre/lib.
6. Cómo decide la detección automática
La detección examina las referencias de clase de su propio código y los nombres de archivo de los JAR de dependencia. A propósito no analiza el bytecode de todas las dependencias de terceros: eso haría que integraciones opcionales de JavaFX se dieran por usadas realmente.
Si JavaFX está embebido mediante shade en una dependencia cuyo nombre no lo delata, la detección automática puede pasarlo por alto. En ese caso, indique --javafx de forma explícita.
7. Alcance de protección recomendado
- Si conviene proteger las subclases de
Applicationde JavaFX, los controladores FXML y los modelos de propiedades depende de cómo se comporten en las pruebas con su versión de Java de destino. - Las clases puente a las que se accede directamente por JNI o desde código nativo deben quedar sin proteger.
- Empiece con el modo simple o con
--compat-scany haga después pruebas de regresión sobre la creación de ventanas, la carga de FXML, los recursos CSS e imágenes, WebView y las bibliotecas nativas de la plataforma.