J’ai pensé que je devais écrire une dernière partie pour conclure ce tutoriel, partie qui traiterait du déploiement de l’application AddressApp.
Le sujet de la 7ème partie
- Déployer notre application JavaFX comme Package natif avec e(fx)clipse
Qu’est ce que le déploiement ?
Le déploiement, c’est le fait de packager l’application puis de la proposer à l’utilisateur. Cette partie du développement est cruciale puisqu’il s’agit du premier contact qu’aura l’utilisateur avec votre programme.
Java mettait souvent en avant le slogan Write Once, Run Anywhere (écrit une fois, exécuté partout) pour illustrer l’aspect cross-platform du langage Java. Idéalement, cela signifie que votre application java peut etre exécuté sur n’importe quel dispositif disposant d’une machine virtuelle Java (JVM).
Par le passé, installer une application Java n'était jamais de tout repos. Si l’utilisateur ne disposait pas de la bonne version de Java sur son système, il devait se voir invité à l’installer préalablement. Cela amenait quelques difficultés comme, par exemple, la nécessité de disposer de droits administrateur, des problèmes de compatibilité entre versions de Java, etc.
Heureusement, JavaFX propose une nouvelle option appelée **Packaging natif ** (aussi appelé Self-Contained Application Package). Un package natif regroupe en fait votre application ainsi que la machine virtuelle Java (qui, elle, est spécifique à une plateforme).
La documentation JavaFX fournie par Oracle contient un guide assez complet pour toutes les options de déploiement JavaFX (en anglais).
Dans cette partie, je vais vous montrer comment créer un Package Natif avec Eclipse et le plugin e(fx)clipse.
Créer un Package Natif
Le but est de créer une application exécutable contenue dans un seul et unique répertoire sur l’ordinateur de l’utilisateur. Voilà à quoi doit ressembler notre AddressApp (sous Windows):
Le répertoire app
contient les éléments de notre application et le répertoire runtime
contient la machine virtuelle Java spécifique à la plateforme.
Pour rendre le tout encore plus confortable à l’utilisateur, nous allons créer un fichier d’installation:
- Un fichier d’installation
exe
pour windows - Un fichier d’installation
dmg
(drag and drop) pour MacOS.
Le plugin e(fx)clipse nous aidera à générer le package natif ainsi que le programme d’installation.
Etape 1 - Editer le fichier build.fxbuild
Le fichier build.fxbuild
est utilisé par e(fx)clipse pour générer un fichier qui sera utilisé par l’outil de génération Ant. (Si vous n’avez pas de fichier build.fxbuild
, créez un nouveau Projet Java FX dans Eclipse et copiez le fichier généré.)
-
Ouvrez le fichier
build.fxbuild
à la racine du projet. -
Remplissez tous les champs contenant une étoile. Pour MacOS: N’utilisez pas d’espace dans le titre de l’application puisque cela semble poser un problème.
-
Comme Packaging Format choisissez
exe
pour Windows,dmg
pour MacOS, etrpm
pour Linux. -
Cliquez sur le lien
Generate ant build.xml only
(sur le côté droit).
-
Verifiez qu’un nouveau répertoire
build
et qu’un fichierbuild.xml
sont créés.
Etape 2 - Ajouter des icônes pour le fichier d’install
Nous souhaitons avoir de belles icônes pour notre install:
- AddressApp.ico pour l’icône du fichier d’install
- AddressApp-setup-icon.bmp pour le splash screen de l’install
- AddressApp.icns pour l’icône de l’install sous mac
- AddressApp-volume.icns pour l’icône de desktop sous mac
- Créez les sous-répertoires suivants dans le répertoire
build
:
build/package/windows
(utilisé seulement pour windows)build/package/macosx
(utilisé seulement pour macos)
- Copiez les icônes correspondantes (celles mentionnées ci-dessus) dans ces sous-répertoires. Cela devrait ressembler à quelque chose comme ça maintenant:
- Important: Le nom des icônes doit parfaitement coller à l’Application title que vous avez spécifié dans votre
build.fxbuild
:
YourAppTitle.ico
YourAppTitle-setup-icon.bmp
YourAppTitle.icns
YourAppTitle-volume.icns
Etape 3 - Ajouter les ressources
Notre répertoire resources
n’est pas copié automatiquement. Nous devons donc l’ajouter manuellement dans le répertoire de build:
- Créez le sous-répertoire suivant dans le répertoire
build
:
build/dist
- Copiez le répertoire
resources
(contenant les images de notre application) dansbuild/dist
.
Etape 4 - Editer build.xml pour inclure les icônes
E(fx)clipse a généré un fichier build/build.xml
qui est prêt à être exécuté par Ant. Il manquera toujours nos icônes et nos ressources.
Comme e(fx)clipse ne peut pas (encore) inclure des ressources additionelles comme notre sous-répertoire resources
et nos icônes, nous allons devoir manuellement éditer le fichier build.xml
:
Ouvrez build.xml
et trouvez l’entrée fxant
. Ajouter une ligne pour le ${basedir}
(cela permettra de rendre accessible nos icônes pour l’install):
build.xml - ajouter “basedir”
<path id="fxant"> <filelist> <file name="${java.home}\..\lib\ant-javafx.jar"/> <file name="${java.home}\lib\jfxrt.jar"/> <file name="${basedir}"/> </filelist> </path>
Trouvez le bloc fx:resources id="appRes"
un peu plus bas dans le fichier. Ajoutez une ligne pour notre sous-répertoire resources
:
build.xml - ajouter “resources”
<fx:resources id="appRes"> <fx:fileset dir="dist" includes="AddressApp.jar"/> <fx:fileset dir="dist" includes="libs/*"/> <fx:fileset dir="dist" includes="resources/**"/> </fx:resources>
Le numéro de version n’a pas été ajouté à fx:application
ce qui implique un numéro de version 1.0
par défaut (comme signalé par quelques personnes dans les commentaires). Pour corriger ça, ajoutez manuellement le numéro de version (Merci à Marc pour la solution):
build.xml - ajouter la “version”
<fx:application id="fxApplication" name="AddressApp" mainClass="ch.makery.address.MainApp" version="1.0" />
A ce stade, nous pourrions déjà lancer build.xml
via Ant. Cela génèrerait un jar exécutable du projet. Mais nous voulons aller un cran plus loin et créer un bel install.
Etape 5 (WINDOWS) - Install Windows en .exe
Avec Inno Setup nous pouvons créer un install pour Windows de notre application, le tout sous la forme d’un unique fichier .exe
. L'.exe
généré ne nécessitera que des droits du niveau de l’utilisateur (pas besoin de droits administrateur). Un raccourci sera également créé (dans le menu ou sur le bureau).
-
Téléchargez Inno Setup 5 ou +. Installez Inno Setup sur votre ordinateur. Notre script Ant l’utilisera automatiquement pour générer le fichier d’install.
-
Indiquez à Windows le chemin d’installation d’Inno Setup (par exemple
C:\Program Files (x86)\Inno Setup 5
). Pour cela, ajoutez lePath
d’Inno Setup aux variables d’environnement de windows. Si vous ne savez pas comment faire, lisez ce tutoriel (en anglais) : How to set the path and environment variables in Windows. -
Redémarrez Eclipse et continuez avec l'étape 6.
Etape 5 (MAC) - Install MacOS en .dmg
Pour créer un install pour Mac OS en dmg
, aucun outil additionnel n’est nécessaire.
Note: Pour que l’image de l’install fonctionne, elle doit avoir exactement le même nom que l’application.
Etape 5 (LINUX etc.) - Install Linux en .rpm
Pour d’autres options (msi
pour windows, rpm
pour Linux) consultez ce post de blog (en anglais) ou la documentation Oracle (en anglais).
Etape 6 - Exécuter build.xml
L'étape finale consiste à exécuter build.xml
avec Ant: clic droit sur le fichier build.xml
puis Run As et enfin Ant Build.
La génération prendra un peu de temps (de l’ordre d’une minute sur mon ordinateur).
Si l’opération est un succès, vous devriez trouver votre package complet dans le répertoire build/deploy/bundles
. Voici à quoi cela ressemble sous windows:
Le fichier AddressApp-1.0.exe
peut être utilisé comme install de l’application. Cette dernière copiera le tout à l’adresse C:/Users/[yourname]/AppData/Local/AddressApp
.
Et ensuite ?
J’espère que ce tutoriel vous a aidé pour être au point avec JavaFX et qu'à partir de là, vous serez capable d'écrire votre propre projet JavaFX.
Tout retour sera le bienvenu. N’hésitez pas à écrire un commentaire si vous avez des suggestions ou si vous avez des questions sur des points qui ne vous paraitraient pas clairs.