Options de démarrage JVM
Protector4J permet de fixer les options de démarrage JVM lors de l'empaquetage, de les ajouter temporairement après le déploiement ou de modifier directement les scripts de démarrage produits. Les autres options avancées de l'interface graphique sont décrites dans Réglages du mode avancé de Protector4J.
1. Quatre façons de les définir
| Méthode | Portée | Survit à un nouvel empaquetage | Convient surtout à |
|---|---|---|---|
| Options de démarrage JVM dans l'interface graphique | Les scripts de démarrage produits pour toutes les plates-formes lors de cette exécution | Oui, tant que vous conservez les réglages de la tâche | L'empaquetage interactif au quotidien |
--jvm-option en ligne de commande | Les scripts de démarrage produits pour toutes les plates-formes lors de cette exécution | Oui ; la commande ou le fichier de tâche fait référence | L'intégration continue et les constructions reproductibles |
Modifier run.sh, run.bat ou les scripts Tomcat | Uniquement le répertoire déployé que vous avez modifié | Non ; un nouvel empaquetage l'écrase | Les ajustements urgents ou propres à un environnement après déploiement |
Variable d'environnement APP_JAVA_OPTS | Uniquement le processus ou l'environnement courant | Rien n'est écrit sur le disque | Le diagnostic ponctuel et l'injection depuis un conteneur ou un service |
Gardez les options durables dans la tâche de l'interface graphique ou dans la commande, et réservez APP_JAVA_OPTS aux substitutions ponctuelles. Si vous modifiez directement un script produit, notez le changement dans votre documentation de déploiement : il faudra le réappliquer au prochain empaquetage.
2. Les définir dans l'interface graphique
- Sur la page d'entrée, choisissez Avancé — personnalisez les options vous-même. Depuis le mode simple, cliquez sur Personnaliser... sur la page finale pour atteindre les options avancées.
- Dans Options communes, repérez Options de démarrage JVM.
- Saisissez une option complète par ligne, par exemple :
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Vérifiez-les dans le récapitulatif final, puis lancez la protection.
Les options sont écrites dans les run.sh et run.bat produits. Sous macOS, run.command appelle le même run.sh et utilise donc les mêmes options. Pour Tomcat, elles figurent aussi sur les chemins de démarrage de bin/catalina.sh et bin/catalina.bat. Le chiffrement de la bibliothèque ne produit qu'une archive, sans script de démarrage : le champ y est désactivé.

3. Les définir en ligne de commande
Répétez --jvm-option une fois par option. Ne regroupez pas plusieurs options JVM dans une même valeur.
p4j javaapp app.jar dist \
--jvm-option -Xms512m \
--jvm-option -Xmx2g \
--jvm-option -Dfile.encoding=UTF-8
Pour Spring Boot :
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Pour Tomcat :
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Mettez entre guillemets toute option contenant des espaces ou des caractères spéciaux :
--jvm-option '-Dexample.message=hello world'
L'empaqueteur échappe chaque option séparément pour les scripts shell et les scripts de commandes, en respectant ces limites.
4. Modifier les scripts sous macOS et Linux
Pour les applications Java ordinaires et Spring Boot, modifiez run.sh dans le répertoire de sortie. run.command ne fait que déléguer à run.sh : rien à y changer.
Repérez la ligne produite JVM_OPTS=(...) et les éventuelles JVM_OPTS+=(...) qui suivent, puis ajoutez votre propre ligne avant le test sur APP_JAVA_OPTS.
JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
# ...
fi
Ne supprimez pas les options --add-opens, --module-path ou --add-modules que l'empaqueteur a générées pour Spring Boot ou JavaFX.
Pour Tomcat, modifiez bin/catalina.sh et ajoutez votre ligne après JVM_OPTS=(...) dans run_java().
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Cela couvre aussi bien l'exécution au premier plan par run.sh que le démarrage en arrière-plan par bin/startup.sh.
5. Modifier les scripts sous Windows
Pour les applications Java ordinaires et Spring Boot, modifiez run.bat dans le répertoire de sortie. Repérez la ligne produite set "JVM_OPTS=..." et ajoutez la vôtre avant le test sur APP_JAVA_OPTS :
set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g -Dfile.encoding=UTF-8"
if defined APP_JAVA_OPTS set "JVM_OPTS=%JVM_OPTS% %APP_JAVA_OPTS%"
Conservez le contenu existant de JVM_OPTS. Ne supprimez pas les options internes dont Spring Boot ou JavaFX a besoin.
Tomcat au premier plan sous Windows
Modifiez bin\catalina.bat et ajoutez votre ligne après le set "JVM_OPTS=..." existant :
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Cela vaut pour run.bat et pour bin\catalina.bat run.
Tomcat en arrière-plan sous Windows
bin\startup.bat crée le processus d'arrière-plan via PowerShell. Le plus simple, pour un changement durable, est de définir APP_JAVA_OPTS avant l'appel à catalina.bat :
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Si vous voulez couvrir premier plan et arrière-plan sans maintenir deux scripts, mieux vaut régénérer le paquet Tomcat avec --jvm-option depuis l'interface ou la ligne de commande.
6. Utiliser APP_JAVA_OPTS le temps d'une exécution
macOS et Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Pour Tomcat :
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
CMD sous Windows
Définissez-la pour la session CMD courante. Les commandes suivantes en héritent ; effacez-la avec set APP_JAVA_OPTS=.
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Pour la cantonner et rétablir l'environnement ensuite :
setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal
Pour Tomcat :
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat
PowerShell sous Windows
$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS
7. Ordre et mises en garde
- Les options générées par l'outil viennent en premier, puis celles définies dans l'interface ou en ligne de commande, et
APP_JAVA_OPTSest ajoutée en dernier. - Pour certaines options JVM, une valeur ultérieure remplace la précédente, mais toutes ne peuvent pas être répétées sans risque : ne comptez pas sur la répétition pour écraser une valeur.
APP_JAVA_OPTSest découpée sur les espaces et ne peut donc pas porter une option qui en contient. Passez alors par l'interface, par--jvm-optionou par la modification du tableau dans le script.- Les options JVM se placent avant la classe principale ou
-jar; les arguments de l'application viennent après la commanderun.shourun.bat. - Après avoir modifié la taille du tas, vérifiez-la au regard de la limite mémoire de votre conteneur, de la mémoire disponible de l'hôte et de votre charge réelle.
- Un nouvel empaquetage écrase les scripts de démarrage, et les modifications manuelles ne sont pas réintégrées automatiquement.