|
Ant - L'automatisation des tâches du programmeur
2.5.La balise <target>
<target
name="init"
description="Initialize
the project">
...
</target>
<target
name="compile"
depends="init"
description="compile
the sources">
...
</target>
<target
name="documentation">
...
</target>
<target
name="dist"
depends="compile"
description="Generate
a jar file">
...
</target>
<target
name="clean">
...
</target>
Le reste du fichier est constitué d'une succession de cibles
correspondant chacune à une étape de la construction de
l'application. Elles se voient incarnées par une paire de
balises target qui renferment une
liste de tâches à
exécuter. Ces dernières doivent bien sûr se voir
également insérées sous la forme de balises XML.
Le nom de chacune d'elles correspond à une fonction précise
et différents paramètres peuvent être spécifiés
par le biais d'attributs ou de nouvelles balises insérées
à l'intérieur de ces dernières.
2.5.1.Ecrire la cible “init”
<target
name="init"
description="Initialize
the project ">
<tstamp/>
<mkdir
dir="${build.dir}" />
<mkdir
dir="${doc.dir}" />
<mkdir
dir="${dist.dir}/lib"/>
</target>
Comme l'indique l'attribut name de
la balise target, notre première
cible est nommée init.
L'attribut description permet d'afficher un message d'aide sur la
cible lorsque l'utilisateur tape la commande suivante :
ant -projecthelp
Bien qu'il soit optionnel, nous vous conseillons donc de la
renseigner systématiquement pour toutes les cibles que vous
souhaitez rendre accessibles. Cette première cible aura pour
effet d'exécuter les tâches tstamp
et mkdir qu'elle contient. tstamp
a pour effet d'assigner la date et l'heure actuelle aux variables
DSTAMP, TSTAMP
et TODAY, respectivement sous la
forme “aaaammjj”, “hhmm” et “mois jour
année”. La tâche mkdir acceptent comme
unique attribut le chemin du répertoire à créer.
Si ce dernier comprend des dossiers inexistants, ces derniers sont
créés automatiquement. Dans notre cas, le répertoire
dist sera ainsi créé implicitement par la
commande suivante avant l'ajout du répertoire lib :
<mkdir dir=”${dist.dir}/lib” />
2.5.2.Ecrire la cible “compile”
Observons à présent la cible compile.
<target
name="compile"
depends="init"
description="compile the sources">
<javac
srcdir="${src.dir}"
destdir="${build.dir}"/>
</target>
L'attribut « depends »,
comme son nom l'indique, a pour fonction de spécifier les
étapes devant être effectuées avant d'exécuter
les clauses de cette cible. Celui-ci doit contenir le nom de ces
dernières séparées par des virgules.
2.5.2.1.la tâche javac
<javac
srcdir="${src.dir}"
destdir="${build.dir}"/>
Notre cible ne compte ici qu'un seul élément appelant
la tâche javac, dont le but
est de compiler tous les fichiers sources Java présents dans
le répertoire indiqué dans l'attribut srcdir
et de placer les classes compilées ainsi obtenues dans le
dossier dont le nom est fourni par destdir.
Cette opération est récursive. Le fichier
présent dans « ./src/com/example/magicalSquare/ »
sera donc bien compilé. A l'instar de make,
Ant compilera chaque classe uniquement s'il n'existe pas déjà
un fichier compilé dans le répertoire de destination ou
si la date d'enregistrement d'un fichier éventuellement déjà
présent dans ce dernier est plus ancienne que le fichier
source. Ainsi, si nous lançons Ant, modifions le fichier
Square.java, puis relançons
immédiatement la compilation, seul la classe Square
sera à nouveau générée.
2.5.3.Ecrire la cible “run”
La cible run nous permet d'exécuter
le logiciel, avec, si besoin, des arguments.
2.5.3.1.la tâche java
<java
dir="${build.dir}"
classname="com.example.magicalSquare.TestSquare"
fork="true"
/>
Nous l'utilisons afin de démarrer
notre application, tout comme nous l'aurions fait avec la commande
“java” dans la console du système. Trois arguments
vont être définis :
-
classname permet de définir la classe de démarrage
de l'application (celle contenant la méthode public void
main(String[] args))
-
dir, permettant de désigner le répertoire
racine de l'application. On y définit le répertoire
build.
-
fork indique qu'une nouvelle machine virtuelle sera utilisée.
Cette option est nécessaire afin de changer le répertoire
d'exécution (attribut dir).
2.5.3.2.le paramètre
classpath
Elle est imbriquée dans la
tâche <java> afin de définir la variable
classpath. Celle-ci contient le chemin dans le système
de fichier vers les librairies jar nécessaire à
l'application (les drivers d'une base de données par exemple).
Le contenu de l’attribut name
nécessite une explication : **/*.jar. Cela signifie que
l’on charge tous les fichiers terminant par « .jar »,
dans tous les sous-répertoires de ${lib.dir}.
<java
…>
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</java>
Le paramètre
fileset permet de lire l'ensemble dans fichier jar dans le
répertoire lib.
Le paramètre
include permet d’inclure dans le classpath
les fichiers correspondant à l’expression régulière
donnés par l’attribut name.
2.5.4.Ecrire la cible documentation
2.5.4.1.La tâche javadoc
<javadoc
packagenames="com.example.magicalSquare"
sourcepath="${src.dir}"
destdir="${doc.dir}"/>
La tâche javadoc de la cible documentation appelle le programme
homonyme qui permet de générer automatiquement des
pages d'aide en HTML à partir du code source de vos classes.
Contrairement à javac, cette
tâche génère systématiquement les fichiers
de documentation sans vérifier si ces derniers existent déjà
ou sont à jour. Il est donc conseillé de ne l'appeler
que de manière ponctuelle.
Nous fournissons ici trois attributs :
-
destdir indique le dossier dans
lequel seront stockées les pages HTML,
-
sourcepath le répertoire
racine de vos sources
-
packagenames indique la liste des
paquetages qui devront être documentés.
Vous pouvez compiler uniquement certains fichiers en omettant ces
deux derniers paramètres et en précisant leur chemin à
l'aide de l'attribut sourcefiles.
2.5.5.Ecrire la cible dist
2.5.5.1.La tâche jar
<target
name="dist"
depends="compile"
description="Generate
a jar file">
<jar
jarfile="${dist.dir}/magical_Square-${DSTAMP}.jar"
basedir="${build.dir}"/>
</target>
L'avant-dernière tâche sert à créer une
archive jar qui permettra de distribuer facilement vos classes
compilées. Vous pouvez remarquer dans l'attribut jarfile
que nous utiliserons ici la variable ${DSTAMP}
(créé par l’appel de la tâche <tstamp/>)
afin d'inclure la date de compilation dans le nom d'archive. Un
nouveau fichier apparaîtra ainsi chaque jour, permettant de
disposer automatiquement d'un historique de notre projet. Cette
pratique est extrêmement courante dans le contexte de projets
OpenSource, où l'on procède
quotidiennement à des “nightly builds”, des
compilations systématiques du code source d'un projet.
2.5.6.Ecrire la cible “clean”
La cible clean est similaire à
celle utilisée dans make et a
pour fonction de nettoyer notre projet de tous les répertoires
créés par Ant.
2.5.6.1.La tâche delete
<target
name="clean">
<delete
dir="${build.dir}"/>
<delete
dir="${doc.dir}"/>
<delete
dir="${dist.dir}"/>
</target>
Nous utilisons pour cela la tâche delete
et son attribut dir qui efface
récursivement un répertoire. Vous pouvez également
effacer une liste de fichiers grâce à l'attribut file.
|
|
 |