Protection des applications Java ordinaires
javaapp est utilisé pour les applications Java ordinaires ayant une classe principale. Il génère un archive protégée, le VLX JRE de la plateforme cible et un script de démarrage.
1. Opérations GUI
-
Sélectionnez Java Application sur la page du type d’application.

-
Sélectionnez le JAR d’entrée, Version Java incluse et la plateforme cible, puis choisissez le mode simple ou le mode avancé.

-
Lorsque le mode avancé est utilisé, remplissez Main class selon les besoins, et configurez les paramètres JVM, JavaFX et les règles d’exclusion; cette page peut être sautée en mode simple. La signification de chaque option est expliquée dans Paramètres du mode avancé de Protector4J.

-
Sélectionnez le répertoire de sortie, vérifiez le résumé des paramètres, puis cliquez sur Run protection.

2. Exemples CLI
Lorsque le manifest contient déjà le bon Main-Class :
p4j javaapp app.jar dist
Si le manifest ne contient pas Main-Class, ou s’il est nécessaire d’utiliser une autre classe de démarrage, cela doit être spécifié via --main :
p4j javaapp app.jar dist --main com.example.Main
Spécification simultanée de la classe de démarrage et des paramètres JVM:
p4j javaapp app.jar dist \
--main com.example.Main \
--jvm-option -Xms512m \
--jvm-option -Xmx2g
Protection sélective:
p4j javaapp app.jar dist \
--protect 'com.example.core.**' \
--exclude 'com.example.core.dto.**'
Analyse de compatibilité et suggestions d’application automatiques:
p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply
Ces deux options ne peuvent pas être utilisées en même temps; leur différence est la suivante:
| Option | Comportement | Quand l’utiliser? |
|---|---|---|
--compat-scan | Seul le JAR d’entrée est scanné; après l’affichage des risques et des recommandations de configuration, l’outil s’arrête. Aucun codage n’a lieu, et dist n’est pas généré, par conséquent aucun répertoire de sortie n’est nécessaire. | À utiliser en premier pour consulter le rapport après avoir protégé une application pour la première fois, mis à jour des dépendances ou modifié le périmètre de protection, ainsi que pour diagnostiquer des problèmes de compatibilité. |
--compat-apply | Après le scan, des recommandations conservatrices sont automatiquement fusionnées, puis le codage se poursuit pour générer la sortie; il est donc impératif de spécifier un répertoire de sortie. | À utiliser pour finaliser l’empaquetage une fois que les résultats du scan ont été lus et que les recommandations automatiques ont été acceptées. Il peut également être utilisé pour des builds répétés avec des règles déjà vérifiées ou dans des processus CI. |
Pour javaapp et --compat-apply, il est possible d’ajouter des classes à exclure en fonction des résultats du scan, ainsi que de modifier des options telles que le ZIP overlay, JavaFX et l’extension d’archive. Pour ces trois dernières options, les valeurs spécifiées explicitement dans la ligne de commande priment; les classes à exclure recommandées sont par défaut fusionnées avec celles spécifiées explicitement dans --exclude. Si vous ne souhaitez pas que des classes soient ajoutées automatiquement, vous pouvez également fournir --no-compat-excludes. Le scanneur effectue uniquement une analyse de compatibilité heuristique statique; les problèmes nécessitant une modification du code ne seront pas automatiquement corrigés par --compat-apply, et des tests de régression sur la plateforme cible restent nécessaires après génération.
Pour connaître les autres commandes CLI, toutes les options, les variables d’environnement et les exemples d’automatisation, veuillez consulter Référence des paramètres CLI.
3. Structure de la sortie
dist/
├── app.p4jx # ou --archive-suffix jar pour générer app.jar
├── vlxjre/ # Temps de exécution compatible avec l’archive et la plateforme cible
├── lib/ # Dépendances de Manifest Class-Path, facultatives
├── run.sh
├── run.command
├── run.bat
└── README.md
Les ressources non classées sont stockées dans la vue des ressources publiques de P4JX. Les ressources classées protégées ne présentent au scanneur que des métadonnées; le véritable corps de la méthode ne peut être chargé que par le temps de exécution de VLX.
4. Démarrage
./run.sh [Paramètres de l’application...]
Windows:
run.bat [Paramètres de l’application...]
Ne remplacez pas vlxjre dans le répertoire de sortie par le JRE système. Si un démarrage manuel est nécessaire, conservez son chemin de classe, ses paramètres de VM et ses paramètres de module JavaFX en utilisant le script généré comme modèle.
Paramètres de démarrage de la JVM
Lors de la compilation, vous pouvez saisir un paramètre par ligne dans JVM startup options via l’interface graphique, ou les réutiliser depuis la ligne de commande:
--jvm-option -Xms512m --jvm-option -Xmx2g
Modifier de manière permanente le répertoire courant après déploiement:
- macOS/Linux: modifiez
run.shet ajoutezJVM_OPTS+=("-Xms512m" "-Xmx2g")avant la condition deAPP_JAVA_OPTS;run.commandappellera alorsrun.sh. - Windows: modifiez
run.batet ajoutezset "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g"avant la condition deAPP_JAVA_OPTS.
Les paramètres temporaires peuvent être injectés via APP_JAVA_OPTS. Voir Configuration des paramètres de démarrage de la JVM pour des exemples complets et des précautions. Les modifications effectuées manuellement dans les scripts seront effacées lors du repackaging.
5. Recommandations concernant le périmètre de protection
Classe d’application protégée par défaut. Pour les projets en production, il est préférable de définir explicitement les paquets métier propres:
--protect 'com.mycompany.product.**'
Ce qui doit généralement être exclu:
- DTO et record utilisant la sérialisation/désérialisation directe de Jackson;
- Classes dont les champs ou méthodes sont accessibles via JNI;
- Classes nécessitant une modification dans des frameworks ORM, de injection de dépendances ou de proxy;
- Bibliothèques tierces et frameworks open source;
- Classe qui doit être redéfinie à partir d’un tableau d’octets par un ClassLoader personnalisé.
6. Suffixes .p4jx et .jar
p4j javaapp app.jar dist --archive-suffix jar
Cette option ne modifie que le nom du fichier, le contenu de l’archive reste P4JX. À utiliser uniquement lorsque des composants tiers codent de manière fixe .jar dans l’URL ou le nom du fichier; elle ne transforme pas l’archive en un ZIP/JAR ordinaire.