Packaging
Création d'un .EXE ou .MSI pour windows.
Info pour Jpackage avec javaFX (https://github.com/dlemmermann/JPackageScriptFX)
Jpackage
Jpackage permet de créer un .exe ou un .msi pour windows.
https://github.com/akman/jpackage-maven-plugin
Info sur le plugin maven jpackage
Création avec un projet contenant des modules Java
Si vous avez un projet contenant des modules Java, la création du runTime avec jlink se fait automatiquement.
Création d'un .msi avec un .jar qui a été compilé avec des modules. On utilise jlink pour créer le runtime
Pour utiliser un module à la place d'un jar, remplacer -main-jar par -module (ou -m) avec le nom du module et optionnellement la main class ex: hellofx/org.openjfx.MyFirstApp
jpackage --type msi --input ./target/ --dest . --main-jar hellofx.jar --main-class org.openjfx.MyFirstApp
--module-path javafxModulesDir --add-modules javafx.controls,javafx.fxml --win-shortcut --win-menu --app-version 1.0.2 --name "My best App" --jlink-options --bind-services --vendor "lepag.ch"
[https://blog\.devgenius\.io/creating\-a\-custom\-jre\-with\-java\-modules\-and\-jlink\-24e2cd81716a\]\(Créer un custom jre)
Création avec un projet sans modules Java
Si vous avez un projet sans modules Java, la création du runTime avec jlink se fait automatiquement. Il ajoute tous les modules java et les modules demandé avec l'option --add-modules.
C'est la solution que je préfère, il me semble qu'elle optimise la taille du runtime.
Exemple:
jpackage --type msi --input ./dist/ --dest . --main-jar hellofx-1.0.jar --main-class org.openjfx.App --module-path "%PATH_TO_FX_MODS%" --add-modules javafx.controls,javafx.fxml,javafx.web,javafx.media --win-shortcut --win-menu --app-version 1.0.2 --name "My best Ap2" --jlink-options --bind-services --vendor "lepag.ch"
Autrement, il faut créer un runtime personnalisé avec jlink.
Ici, on ajoute tous les modules java et les modules javafx demandé avec l'option --add-modules.
jlink --module-path "%PATH_TO_FX_MODS%" --add-modules java.base,java.compiler,java.datatransfer,java.xml,java.prefs,java.desktop,java.instrument,java.logging,java.management,java.security.sasl,java.naming,java.rmi,java.management.rmi,java.net.http,java.scripting,java.security.jgss,java.transaction.xa,java.sql,java.sql.rowset,java.xml.crypto,java.se,java.smartcardio,java.base,javafx.fxml,javafx.web,javafx.media --bind-services --strip-debug --no-man-pages --no-header-files --output mynewjdk
Après avoir créé notre runtime personnalisé, on peut créer le .msi avec jpackage.
jpackage --type msi --input ./dist/ --dest . --main-jar hellofx-1.0.jar --main-class org.openjfx.App --runtime-image runtime21fx --win-shortcut --win-menu --app-version 1.0.2 --name "My best Ap3" --vendor "lepag.ch"
Personnalisation
https://stackoverflow.com/questions/67784565/jpackage-update-path-environment-variable
Info sur la configuration de jpackage
Jpackage crée des fichiers Wix que l'on peux reprendre et les modifier et les réutiliser pour créer un .msi personnalisé.
Pour ceci, ajouter --temp "./tempdir" à la commande jpackage. Ceci enregistrera tous les fichiers Wix dans le dossier tempdir.
On crée un nouveau dossier avec les fichiers modifiés et on lance la commande jpackage avec l'option --resource-dir "WixOverwriteFilesDir"
Modification du fichier Wix
Des tests fonctionnels sont dans ce dossier C:\Users\pag\IdeaProjects\testOnly\samplesBuildJavafx\IDE\IntelliJ\Modular\Maven\hellofx