Protéger les applications JavaFX
JavaFX peut être activé aussi bien pour les applications Java ordinaires que pour les applications de bureau Spring Boot. Le runtime allégé de P4JX n'embarque pas JavaFX par défaut : il faut l'activer explicitement, ou laisser l'analyse de compatibilité s'en charger.
1. Dans l'interface graphique
-
Pour une application JavaFX simple, choisissez Application Java sur la page du type d'application. Pour une application de bureau JavaFX bâtie sur un conteneur Spring, choisissez Spring Boot. Le chiffrement de la bibliothèque ne produit qu'une archive protégée et ne remplace pas l'empaquetage d'une véritable application JavaFX.

-
Sélectionnez le JAR d'entrée, la version de Java à embarquer et les plates-formes cibles, puis choisissez le mode simple ou avancé. Les composants JavaFX sont récupérés séparément pour chaque version de Java et chaque plate-forme : une tâche multi-plates-formes produit donc un paquet de sortie distinct pour chacune.

-
En mode simple, si l'analyse de compatibilité trouve des références
javafx.*ou des dépendances JavaFX, elle active JavaFX automatiquement et en explique la raison dans son résultat. Si elle repère aussijavafx.scene.web, WebView est inclus. L'analyse étant heuristique et statique, vérifiez de nouveau le récapitulatif JavaFX sur la page de sortie. -
En mode avancé, cochez Inclure JavaFX dans le runtime empaqueté dans l'onglet Runtime JavaFX, puis choisissez la stratégie WebView :
- Automatique (détecter javafx.scene.web) : décide selon que l'application référence ou non
javafx.scene.web. - Inclure : intègre toujours WebView (
fx-webkit). - Exclure : ne l'intègre jamais.
Pour une application Java ordinaire, l'onglet se présente ainsi :

Les applications de bureau Spring Boot utilisent un onglet portant le même nom :

- Automatique (détecter javafx.scene.web) : décide selon que l'application référence ou non
-
Après avoir choisi le répertoire de sortie, vérifiez que le récapitulatif indique JavaFX comme intégré et que l'état de WebView correspond à vos attentes, puis cliquez sur Exécuter la protection. Une fois le paquet produit, utilisez son script de démarrage pour contrôler sur chaque plate-forme cible la fenêtre, le FXML, les ressources CSS et images, et WebView.
Les composants WebView pèsent environ 40 Mo. Choisissez Exclure pour alléger le paquet si vous ne vous en servez pas. Les autres réglages des pages avancées sont décrits dans Réglages du mode avancé de Protector4J.
2. Récupérer les composants en ligne de commande
p4j javaapp fx-app.jar dist --javafx
Pour Spring Boot avec JavaFX :
p4j springboot fx-boot.jar dist --javafx
Pour forcer l'inclusion ou l'exclusion de WebView :
--javafx-webview
--no-javafx-webview
L'outil télécharge les composants adaptés depuis le site public de téléchargement de votre région, selon la ligne du JDK et la plate-forme cible. Ni le téléchargement de JavaFX ni celui du VLX JRE n'exige de confier une clé de stockage cloud au client.
3. Composants hors ligne
La ligne de commande accepte un répertoire local :
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
Ce répertoire peut prendre l'une de ces deux formes :
fx-core.tar.gzet, facultativement,fx-webkit.tar.gz;- une arborescence JavaFX déjà extraite, avec
lib/pour racine.
L'interface graphique ne permet pas de désigner un répertoire JavaFX local : utilisez la ligne de commande hors connexion.
4. FXML
Si l'application utilise FXMLLoader, l'analyse de compatibilité recommande d'activer la superposition ZIP pour scanners :
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
Les ressources FXML, les signatures des contrôleurs et le balayage du framework doivent être vérifiés en démarrant réellement l'application sur la plate-forme cible.
5. Java 8 face à Java 11 et versions ultérieures
- Java 8 utilise
jfxrt.jaret le modèle des répertoires d'extension : les scripts produits n'ont généralement pas besoin d'options de module. - Java 11 et les versions ultérieures utilisent des JAR JavaFX modulaires, et les scripts produits définissent un chemin de modules dédié ainsi que
--add-modules.
Démarrez toujours par le run.sh, run.command ou run.bat produit. Ne pointez pas vous-même le chemin de modules vers l'ensemble de vlxjre/lib.
6. Comment fonctionne la détection automatique
La détection examine les références de classes de votre propre code et les noms de fichiers des JAR de dépendances. Elle n'inspecte volontairement pas le bytecode de toutes les dépendances tierces : cela ferait passer pour utilisées des intégrations JavaFX seulement optionnelles.
Si JavaFX est intégré par shading dans une dépendance dont le nom ne le laisse pas deviner, la détection automatique peut le manquer. Indiquez alors explicitement --javafx.
7. Étendue de protection recommandée
- Protéger ou non les sous-classes
Applicationde JavaFX, les contrôleurs FXML et les modèles de propriétés dépend de leur comportement lors des tests avec votre version de Java cible. - Les classes passerelles atteintes directement par JNI ou par du code natif doivent rester sans protection.
- Commencez par le mode simple ou
--compat-scan, puis menez des tests de non-régression sur la création de fenêtres, le chargement du FXML, les ressources CSS et images, WebView et les bibliothèques natives de la plate-forme.