Ant est un outil créé par la fondation
Apache (qui gère déjà le serveur éponyme, PHP, Struts,
Tomcat...), qui permet de gérer la construction d'une application. A l'origine
un sous-projet de Jakarta, il est depuis devenu l'un des projets majeurs de la
fondation, de par son utilité et sa popularité.
Pour les habitués, il peut se comparer
à la commande make (même rôle,
même fonctionnalité), mais offre l'avantage de pouvoir intégrer
des tests tout du long du processus de construction (avec JUnit par exemple),
d'être multi--plateforme (Java oblige), d'être extensible de
multiples manières...
Couplé à un système de type CVS,
Ant permet de créer des "nightly builds"
: chaque nuit, sur une machine de base, il compile l'ensemble des
fichiers sources d'un projet ensemble, et fait son rapport au(x)
développeur(s). Cela permet de générer des
versions utilisables, de tester les lignes de code de la journée,
et de faire passer une batterie de tests à l'ensemble du
projet - le tout sans intervention humaine. Lorsque l'équipe
de développement arrive le lendemain, le rapport de Ant peut
leur permettre de cerner les erreurs, ou de constater que le programme
se compile parfaitement et est fonctionnel.
Installation
Après avoir téléchargé une distribution
du produit et l'avoir décompressé dans son répertoire
définitif, il faut impérativement créer les
trois variables d'environnement nécessaire au fonctionnement
d'Ant. Par exemple, sous Windows dans un fichier .bat, ou via l'onglet
"Avancé" des Propriétés Système
:
SET ANT_HOME=C:\tools\ant
SET JAVA_HOME=C:\j2sdk1.4.2_02
SET PATH=%PATH%;%ANT_HOME%\bin
Utilisation
Ant permet de gérer l'ensemble des travaux à l'aide
d'un fichier XML, build.xml, spécifique
à chaque projet, qui permet de spécifier les cibles,
dépendances, conditions, opérations et paramètres
de la construction.
<project name="monProject"
default="compileProject">
<target name="init">
<property name="sourceDir value="/src">
<property name="outputDir value="/classes">
</target>
<target name="cleanUpOutputDir" depends="init">
<deltree dir="${outputDir}"
/>
</target>
<target name="makeOutputDir" depends="cleanUpOutputDir">
<mkdir dir="${outputDir}" />
</target>
<target name="compileProject" depends="makeOutputDir">
<javac srcdir="${sourceDir}"
destdir="${outputDir}" />
</target>
</project>
Ce premier fichier build.xml
est déjà facile à lire : on comprend vite les
quatre tâches à accomplir à chaque lancement
: définir les chemins d'accès, effacer répertoire
de destination (qui contient les fichiers du dernier lancement),
créer à nouveau le dossier de destination, et lancer
javac sur nos fichier .java.
A la fin du processus, si toutes les étapes se sont bien
déroulées, on aura nos .class
dans le dossier /classes...
L'attribut default
de la balise globale project permet
de pointer vers la balise target
à exécuter. Etant donné que, via l'attribut
depends, chaque balise target
dépend de la précédente, on permet ainsi le
parcours de toutes les opérations à accomplir. De
son coté, la cible init,
qui sert à initialiser certaines propriétés
(une sorte de constructeur, donc) est toujours appelée en
premier.
Bien qu'optionnel, cet attribut depends
se rend très utile car il permet donc de conditionner les
tâches du fichier : une tâche donnée ne sera
exécutée que si celle dont elle dépend est
terminée, et ainsi de suite.
Une opération peut aussi dépendre de plusieurs opérations
: depends="makeOutputDir,
cleanUpOutputDir".
Les commandes deltree,
mkdir et javac,
bien que connues, font en fait appel à des fonctions de Ant (et non aux
commandes système directement). Ant dispose ainsi d'un bon nombre de commandes
: copydir, copyfile,
jar, javadoc...
Une fois le fichier XML adéquat pour votre
application placée dans son dossier, il suffit ensuite de taper "ant"
dans la console pour construire l'application - du moins, sa version compilable
pour le moment.
L'utilisation de Ant permet de mettre en application une méthode de développement
efficace, faisant appel à l'intégration continue : une application
est construite autant de fois que nécessaire.
Nous verrons dans un prochain article
comment intégrer Ant dans son processus de travail quotidien.
|