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.

OptionDescription
--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-folderCré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

OptionDescription
--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-jitTient les méthodes protégées à l'écart du JIT et les exécute dans l'interpréteur
--zip-overlay off|scannerDésactive ou active la vue de compatibilité ZIP pour scanners. Par défaut, off
--compat-scanAnalyse puis s'arrête ; aucun argument de sortie n'est requis
--compat-applyAnalyse, applique les recommandations prudentes, puis poursuit l'encodage
--no-compat-excludesAvec --compat-apply : n'ajoute pas automatiquement les exclusions recommandées
--native-compat jxbrowserUniquement 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 :

OptionDescription
--archive-suffix p4jx|jarSuffixe 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]
OptionDescription
--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]
OptionDescription
--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-webviewIntègre toujours WebView
--no-javafx-webviewN'intègre jamais WebView
--no-javafxDé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]
OptionDescription
--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|separateDisposition de la sortie ; par défaut p4jx-fat
--javafx [<dir>]Active JavaFX, éventuellement depuis un répertoire local de composants
--javafx-webviewIntègre toujours WebView
--no-javafx-webviewN'intègre jamais WebView
--no-javafxDésactive explicitement JavaFX
--native-compat jxbrowserComme pour javaapp ; le même scanner couvre le BOOT-INF/lib imbriqué

6. tomcat

p4j tomcat input.war répertoire-de-sortie [options]
OptionDescription
--exclude <rules>Laisse sans protection les classes ou paquets correspondants de WEB-INF/classes
--context </path>Chemin de contexte ; par défaut /app
--append-appAjoute l'application à un paquet Tomcat P4JX existant
--tomcat-version auto|9|10Détecte automatiquement ou impose la version. En ligne de commande, auto par défaut
--precompile-jspForce la précompilation des JSP
--no-precompile-jspDé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.

OptionDescription
--windows-exeProduit 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.

VariableOption équivalenteDescription
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_DIRaucuneRemplace le répertoire de cache des téléchargements du VLX JRE
APP_JAVA_OPTSà comparer avec --jvm-optionAjoute 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.