Aller au contenu

Installateur Windows pour une application Java, de jpackage à Setup.exe

Utilisez jpackage pour regrouper votre JAR et un runtime Java dans un dossier avec un .exe natif, puis transformez ce dossier en installateur Windows, sans le toolset WiX.

Mis à jour le 31 octobre 2026 · 3 min de lecture

« Installez d'abord Java » n'est pas une phrase que l'on souhaite dire à ses clients. Depuis le JDK 14, jpackage règle la moitié du problème : il regroupe votre application avec un runtime Java allégé et lui donne un MyApp.exe natif. L'autre moitié, l'installateur Windows, est le moment où jpackage vous demande d'installer le toolset WiX et d'en apprendre les subtilités. Ce guide prend le dossier produit par jpackage et le transforme en Setup.exe sans rien de tout cela.

Étape 1 : construire l'image de l'application

Placez le JAR exécutable et ses JAR de dépendances dans un même dossier (lib/ ci-dessous), puis lancez jpackage sous Windows :

jpackage --type app-image --name MyApp --input lib --main-jar myapp.jar --main-class com.example.Main --icon app.ico --app-version 2.4.0

Cela crée MyApp/, qui contient :

  • MyApp.exe, un lanceur natif avec votre icône ;
  • app/, vos JAR et un fichier de configuration ;
  • runtime/, un runtime Java réduit aux seuls modules dont l'application a besoin.

Pour une application JavaFX, ajoutez --module-path pointant vers le dossier lib du SDK JavaFX et --add-modules javafx.controls,javafx.fxml (à adapter aux modules que vous utilisez). Pour une application modulaire, utilisez --module à la place de --main-jar.

Ouvrez MyApp\MyApp.exe pour vérifier que l'application démarre sans Java installé sur le système. C'est le dossier runtime/ qui rend cela possible.

jpackage doit s'exécuter sous Windows pour produire une image Windows. Une machine Windows, une machine virtuelle ou un runner Windows en CI conviennent tous ; consultez construire depuis un Mac pour les options.

Étape 2 : compresser l'image en zip

Compressez le contenu de MyApp/ : MyApp.exe, app/ et runtime/. Conservez la structure ; le lanceur s'attend à trouver app/ et runtime/ à côté de lui.

Étape 3 : construire l'installateur

  1. Envoyez le zip sur ExeTup. Il choisit MyApp.exe comme programme principal.
  2. Saisissez le nom, la même version que celle passée à --app-version, et votre nom d'éditeur.
  3. Choisissez tous les utilisateurs (Program Files, invite administrateur) ou utilisateur actuel (sans invite). Les applications Java métier distribuées aux employés sont souvent installées par utilisateur ; les applications grand public, généralement par machine.
  4. Conservez 64 bits ; jpackage construit pour l'architecture du JDK, c'est-à-dire x64 sur presque toutes les machines.
  5. Envoyez app.ico, activez les raccourcis et lancez la compilation.

Le résultat est un installateur Windows qui met l'image de l'application en place avec une entrée dans le menu Démarrer et un désinstallateur. Les clients ne voient jamais Java.

Pourquoi ne pas laisser jpackage créer l'installateur ?

jpackage --type exe ou --type msi produit bel et bien un installateur, et pour certaines équipes cela suffit. Il exige WiX Toolset 3 installé et présent dans le PATH, propose un assistant figé aux options limitées, et le comportement de son désinstallateur et de ses raccourcis présente des aspérités difficiles à corriger sans plonger dans WiX. Utiliser l'app-image et un installateur séparé garde les deux préoccupations distinctes : jpackage s'occupe du regroupement du runtime, ce qu'il fait bien, et l'installateur se charge de l'intégration à Windows.

Remarques propres à Java

  • Taille du runtime. Un runtime allégé pèse 40 à 80 Mo. La réduction des modules à la manière de jlink est automatique ; --jlink-options --strip-debug et --jlink-options --no-man-pages allègent encore un peu.
  • Options Java. Passez les drapeaux de la JVM avec --java-options "-Xmx1g" au moment de construire l'image ; ils sont intégrés à la configuration du lanceur.
  • Mises à jour. Distribuez un nouvel installateur avec une version supérieure. L'installation par-dessus la version précédente remplace app/ et runtime/ sur place.
  • Launch4j et outils similaires enveloppent un JAR dans un .exe mais n'embarquent pas de runtime par défaut, et ne suppriment donc pas l'étape « installer Java ». jpackage le fait.
  • Signature. Signez MyApp.exe avant de compresser, puis le Setup.exe téléchargé ensuite ; consultez le guide SmartScreen.

Questions fréquentes

Les clients doivent-ils avoir Java installé ?

Non. Le dossier runtime/ créé par jpackage contient tout ce dont l'application a besoin, et l'installateur le livre avec l'application.

Puis-je installer l'application sans le toolset WiX ?

Oui. WiX n'est nécessaire que pour les types exe et msi propres à jpackage. Construisez plutôt une app-image et utilisez ExeTup pour l'installateur.

Est-ce que cela fonctionne avec JavaFX ?

Oui. Incluez les modules JavaFX lors de la construction de l'image, testez MyApp.exe, puis empaquetez le dossier comme décrit ci-dessus.

Puis-je embarquer un autre JDK, comme Temurin ?

jpackage utilise le JDK depuis lequel il s'exécute pour le runtime. Lancez-le depuis le JDK que vous voulez livrer, ou passez --runtime-image avec un runtime construit avec jlink.

Guides associés