Référence de la ligne de commande
Les exemples de cette page emploient la commande p4j fournie par l'installation. Sous Windows, l'interface graphique s'installe depuis le .exe, et sous macOS depuis Protector4J.app, à l'intérieur du .dmg ; la manière dont l'interface a été installée ne change rien à la syntaxe ci-dessous. Si l'installateur n'a pas ajouté la CLI au PATH, lancez-la depuis le point d'entrée en ligne de commande du répertoire d'installation de Protector4J.
p4j --help
1. Commandes
p4j encode <input.jar> <output.p4jx|output.jar> [options]
p4j javaapp <input.jar> <répertoire de sortie> [options]
p4j springboot <input.jar> <répertoire de sortie> [options]
p4j tomcat <input.war> <répertoire de sortie> [options]
Pour la commande de bas niveau encode, le nom de la commande peut être omis :
p4j input.jar output.p4jx [options]
Les options de niveau démarrage désignent la cible de l'empaquetage. Elles peuvent précéder le nom de la commande ou être regroupées à la fin de la ligne ; la ligne de commande exportée par l'interface graphique adopte cette seconde forme.
| Option | Description |
|---|---|
--java-version <N> | La ligne Java à embarquer : 8, 11, 17, 21 ou 25. Valeur par défaut : 21 |
--target-platform <id>[,<id>...] | Une ou plusieurs plates-formes cibles, séparées par des virgules ou en répétant l'option. Par défaut, la plate-forme courante |
--create-new-folder | Crée un sous-répertoire p4jx-xxxxxxxx dans le répertoire de sortie. Uniquement pour javaapp, springboot et tomcat |
Par exemple :
p4j --java-version 21 --target-platform linux-x64 springboot app.jar dist
p4j springboot app.jar dist --java-version 21 --target-platform linux-x64
Ces deux commandes sont équivalentes. Les options de niveau démarrage ne peuvent pas s'intercaler parmi les options de l'empaqueteur : elles y seraient prises pour des options inconnues et la commande échouerait.
2. Options communes
| Option | Description |
|---|---|
--jre-home <path> | Dérive les clés du runtime P4JX final indiqué. Les commandes de plus haut niveau copient aussi ce runtime |
--keys <keys.json> | Utilise un fichier de clés privées explicite. Réservé au diagnostic et aux processus internes ; ne jamais le livrer avec l'application |
--no-jit | Tient les méthodes protégées à l'écart du JIT et les exécute dans l'interpréteur |
--zip-overlay off|scanner | Désactive ou active la vue de compatibilité ZIP pour scanners. Par défaut, off |
--compat-scan | Analyse puis s'arrête ; aucun argument de sortie n'est requis |
--compat-apply | Analyse, applique les recommandations prudentes, puis poursuit l'encodage |
--no-compat-excludes | Avec --compat-apply : n'ajoute pas automatiquement les exclusions recommandées |
--native-compat jxbrowser | Uniquement pour javaapp et springboot : demande l'admission du JxBrowser intégré. La version, la plate-forme et l'empreinte à cinq couches restent intégralement vérifiées, et aucune autre valeur, chemin ou empreinte n'est accepté |
--account-email <email> | Adresse e-mail du compte sous licence |
--account-password <password> | Mot de passe du compte sous licence |
--app-id <id> | Identifiant de l'application |
--license-expires-in <sec> | Durée d'essai demandée, en secondes, dans les limites fixées par le serveur |
Les commandes d'empaquetage de plus haut niveau acceptent en outre :
| Option | Description |
|---|---|
--archive-suffix p4jx|jar | Suffixe de l'archive produite ; par défaut p4jx. Le format interne reste inchangé |
--jvm-option <option> | Écrit l'option dans les scripts de démarrage macOS, Linux et Windows. Une option par commutateur, répétable. Lorsque l'EXE Windows est activé, les mêmes options y sont intégrées |
3. encode
p4j encode input.jar output.p4jx [options]
| Option | Description |
|---|---|
--bind-launcher <jar> | Calcule l'empreinte SHA-256 du JAR du lanceur et l'associe |
--launcher-sha256 <hex> | Fournit directement l'empreinte SHA-256 du lanceur, pour les intégrations avancées |
--runtime-major <N> | Cible de la vue des ressources et de l'aplatissement multi-versions. Par défaut, 21 |
--bind-launcher et --launcher-sha256 ne peuvent pas être employées ensemble.
4. javaapp
p4j javaapp input.jar répertoire-de-sortie [options]
| Option | Description |
|---|---|
--main <class> | La classe principale à démarrer |
--protect <rules> | Règles des classes et paquets à protéger, séparées par des virgules. Par défaut, toutes les classes |
--exclude <rules> | Règles de ce qui reste hors du périmètre de protection |
--javafx [<dir>] | Active JavaFX, éventuellement depuis un répertoire local de composants |
--javafx-webview | Intègre toujours WebView |
--no-javafx-webview | N'intègre jamais WebView |
--no-javafx | Désactive explicitement JavaFX |
--native-compat jxbrowser | Écrit ATTACH_THREAD pour les bibliothèques IPC de JxBrowser correspondant exactement au répertoire intégré. Java 17, 21 et 25 uniquement |
5. springboot
p4j springboot input.jar répertoire-de-sortie [options]
| Option | Description |
|---|---|
--main <class> | La classe principale Spring Boot. Lue par défaut dans le manifeste |
--protect <rules> | Protège les classes correspondantes de BOOT-INF/classes |
--exclude <rules> | Laisse sans protection les classes ou paquets correspondants |
--protect-lib <globs> | Protège les JAR correspondants de BOOT-INF/lib, séparés par des virgules |
--layout p4jx-fat|fat|separate | Disposition de la sortie ; par défaut p4jx-fat |
--javafx [<dir>] | Active JavaFX, éventuellement depuis un répertoire local de composants |
--javafx-webview | Intègre toujours WebView |
--no-javafx-webview | N'intègre jamais WebView |
--no-javafx | Désactive explicitement JavaFX |
--native-compat jxbrowser | Comme pour javaapp ; le même scanner couvre le BOOT-INF/lib imbriqué |
6. tomcat
p4j tomcat input.war répertoire-de-sortie [options]
| Option | Description |
|---|---|
--exclude <rules> | Laisse sans protection les classes ou paquets correspondants de WEB-INF/classes |
--context </path> | Chemin de contexte ; par défaut /app |
--append-app | Ajoute l'application à un paquet Tomcat P4JX existant |
--tomcat-version auto|9|10 | Détecte automatiquement ou impose la version. En ligne de commande, auto par défaut |
--precompile-jsp | Force la précompilation des JSP |
--no-precompile-jsp | Désactive la précompilation des JSP |
7. Options de l'EXE Windows
javaapp, springboot et tomcat peuvent produire en plus un lanceur Windows natif. Les plates-formes cibles doivent comprendre windows-x64, windows-x86 ou windows-aarch64.
| Option | Description |
|---|---|
--windows-exe | Produit un EXE d'application Windows. Sans elle, aucun n'est produit |
--exe-name <name> | Nom du fichier EXE ; par défaut celui du fichier d'entrée, ou tomcat pour les paquets tomcat |
--exe-mode <mode> | console (par défaut) ou gui |
--exe-icon <ico> | Icône Windows facultative, au format .ico |
--exe-file-version <a.b.c.d> | Version de fichier PE : un à quatre nombres, chacun entre 0 et 65535. Vide équivaut à 0.0.0.0 |
--exe-product-version <a.b.c.d> | Version de produit PE, mêmes règles |
--exe-company <text> | Nom de la société |
--exe-product <text> | Nom du produit |
--exe-description <text> | Description du fichier |
--exe-copyright <text> | Mention de copyright |
Toute option --exe-* active à elle seule la production de l'EXE. Dans une tâche multi-plates-formes, seuls les paquets Windows reçoivent un EXE ; les autres sont produits normalement et conservent leurs scripts de démarrage.
p4j --target-platform windows-x64 javaapp app.jar dist --windows-exe --exe-name MyApp.exe --exe-mode gui
Les instructions complètes, le comportement à l'exécution et les étapes de signature de code figurent dans Créer un lanceur EXE Windows.
8. Syntaxe des règles
com.example.SecretService une seule classe
com.example.service ce paquet uniquement
com.example.service.* ce paquet uniquement
com.example.service.** ce paquet et tous ses sous-paquets
com/example/Secret.class chemin d'une entrée de classe
Séparez plusieurs règles par des virgules. Mettez entre guillemets celles contenant * pour que le shell ne les développe pas :
--protect 'com.example.**' --exclude 'com.example.dto.**,com.example.config.**'
9. Variables d'environnement
Les variables d'environnement conviennent à des valeurs communes pour une tâche d'intégration continue, un conteneur ou plusieurs commandes exécutées à la suite. Lorsqu'un empaquetage précis doit être consigné et reproductible, indiquez plutôt les valeurs explicitement en options.
| Variable | Option équivalente | Description |
|---|---|---|
P4JX_RUNTIME_JAVA_VERSION | --java-version <N> | La ligne Java pour l'empaquetage de haut niveau : 8, 11, 17, 21 ou 25 |
P4JX_RUNTIME_PLATFORM | --target-platform <id> | Une seule plate-forme cible. Pour en empaqueter plusieurs d'un coup, employez l'option en ligne de commande |
P4JX_RUNTIME_CACHE_DIR | aucune | Remplace le répertoire de cache des téléchargements du VLX JRE |
APP_JAVA_OPTS | à comparer avec --jvm-option | Ajoute des options JVM le temps d'une exécution de l'application produite. --jvm-option les inscrit dans le script à l'empaquetage : les deux ne sont pas équivalents |
Si une variable et l'option correspondante sont toutes deux définies, l'option explicite l'emporte. Les variables d'environnement restent pleinement prises en charge, si bien que vos scripts d'automatisation existants continuent de fonctionner.
Par exemple, pour fixer une cible commune à plusieurs commandes dans le shell courant :
export P4JX_RUNTIME_JAVA_VERSION=21
export P4JX_RUNTIME_PLATFORM=linux-x64
p4j springboot service-a.jar release/service-a
p4j springboot service-b.jar release/service-b
Pour les usages avancés où vous lancez directement le JAR de l'empaqueteur, les propriétés système équivalentes existent :
-Dp4jx.runtime.java.version=<N>
-Dp4jx.runtime.platform=<platform>
-Dp4jx.runtime.cache.dir=<dir>
10. Exemple d'automatisation
p4j --java-version 21 \
--target-platform linux-x64 \
springboot build/app.jar release/linux-x64 \
--compat-apply \
--protect 'com.example.service.impl.**' \
--exclude 'com.example.dto.**,com.example.config.**' \
--jvm-option -Xms1g \
--jvm-option -Xmx2g \
--app-id com.example.app
Les options de protection, d'exclusion et de disposition indiquées explicitement l'emportent sur les recommandations automatiques. Il est conseillé de consigner les options finales, l'empreinte SHA-256 du fichier d'entrée et la version de l'outil comme trace de provenance de la publication.
Les exemples pour l'interface et la ligne de commande, ainsi que la modification de run.sh, run.bat, des scripts de démarrage Tomcat et de PowerShell, figurent dans Options de démarrage JVM.