mercredi 21 janvier 2015

JavaFX / ANT / MSI : le trio gagnant !

Pour pouvoir générer un fichier MSI (Windows Installer), il faut d'abord installer Wix Toolset.

Wix est un ensemble d'outils qui permettent de créer le <Windows Installer> de votre application (.MSI) à partir de documents XML.

Ces documents XML (.WXS, .WXL par exemple) vont "décrire" l'installation de votre application.

Une fois Wix installé, intéressons - nous au fichier <BUILD.XML> de notre application JavaFX.

Pour rappel, ce fichier va "builder" votre application et générer dans notre cas le fichier MSI.

L'exécution de ce fichier se fait par ANT.

Voici un extrait d'un fichier <BUILD.XML> type :

<?xml version="1.0" encoding="UTF-8"?>
<project name="mon application" default="do-deploy" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property name="classpath" location="chemin JDK\jre\lib\ext\jfxrt.jar;" />

<target name="init-fx-tasks">
<path id="fxant">
<filelist>
<file name="${basedir}" />
</filelist>
</path>

<taskdef resource="com/sun/javafx/tools/ant/antlib.xml" uri="javafx:com.sun.javafx.tools.ant" classpathref="fxant" classpath="chemin JDK\lib\ant-javafx.jar" />
</target>

<target name="setup-staging-area">
<delete dir="externalLibs" />
<delete dir="project" />
<delete dir="projectRefs" />

<mkdir dir="externalLibs" />

<copy todir="externalLibs">
<fileset dir="chemin mon projet\lib">
<include name="*" />
</fileset>
</copy>

<mkdir dir="project" />

<copy todir="project">
<fileset dir="chemin mon projet">
<include name="src/**" />
</fileset>
</copy>

<mkdir dir="projectRefs" />

</target>

<target name='do-compile'>
<delete dir="build" />
<mkdir dir="build/src" />
<mkdir dir="build/lib" />
<mkdir dir="build/classes" />

<copy todir="build/lib">
<fileset dir="externalLibs">
</fileset>
</copy>

<copy todir="build/src">
<fileset dir="project/src">
<include name="**/*" />
</fileset>
</copy>

<javac includeantruntime="false" source="1.8" target="1.8" srcdir="build/src" destdir="build/classes" encoding="Cp1252">
<classpath>
<fileset dir="build/lib">
<include name="*" />
</fileset>
</classpath>
</javac>

<copy todir="build/classes">
<fileset dir="project/src">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>

<target name="do-deploy" depends="setup-staging-area, do-compile, init-fx-tasks">
<delete file="dist" />
<delete file="deploy" />

<mkdir dir="dist" />
<mkdir dir="dist/lib" />

<copy todir="dist/lib">
<fileset dir="externalLibs">
<include name="*" />
</fileset>
</copy>

<mkdir dir="dist/resources" />

<copy todir="dist/resources">
<fileset dir="../resources" />
</copy>

<mkdir dir="package" />

<fx:resources id="appRes">
<fx:fileset dir="dist" includes="mon_application.jar" />
<fx:fileset dir="dist" includes="lib/*" />
<fx:fileset dir="dist" includes="resources/**" />
</fx:resources>

<fx:application id="fxApplication" name="MonApplication" mainClass="application.Main" version="x.x.x" />

<mkdir dir="build/classes/META-INF" />

<fx:jar destfile="dist/mon_application.jar">
<fx:application refid="fxApplication" />
<fileset dir="build/classes" />
<fx:resources refid="appRes" />

<manifest>
<attribute name="Implementation-Vendor" value="Mon Entreprise" />
<attribute name="Implementation-Title" value="MonApplication" />
<attribute name="Implementation-Version" value="x.x.x" />
<attribute name="JavaFX-Feature-Proxy" value="None" />
</manifest>
</fx:jar>

<mkdir dir="deploy" />

<fx:deploy verbose="true" embedJNLP="false" extension="false" includeDT="false" offlineAllowed="true" outdir="${basedir}/deploy" outfile="mon_application" nativeBundles="msi" updatemode="background">
<fx:info title="mon application" vendor="mon entreprise" />
<fx:application refId="fxApplication" />

<fx:resources refid="appRes" />

<fx:info vendor="mon entreprise" description="deploiement de mon application" />

</fx:deploy>

</target>*
</project>

Nous ne rentrerons pas dans le détail de ce fichier mais vous noterez que la balise <fx:deploy> permet de spécifier le type de "bundle" à savoir dans notre cas le type "MSI".

Exécutez ce fichier <BUILD.XML> (après quelques customisations bien sûr) : votre fichier MSI est généré !

Aucun commentaire:

Enregistrer un commentaire