I. INSTALLATION

Peu importe le fait que ce tutoriel soit basé sur la dernière version de Apache Ant ou que nous recherchions une version antérieure, il est intéressant de consulter la page officielle du projet : http://ant.apache.org qui s'avère être une véritable mine d'informations. En effet, la fondation Apache y propose par exemple, en sus d'un ensemble considérable de ressources, la possibilité de vérifier l'intégrité des données téléchargées par PGP. Ainsi, nous pouvons être assuré de ne pas installer un quelconque Spyware ou autre contenu corrompu.

Notons au passage que le JDK1.4 de Sun (resp. JDK1.5) est supporté à partir de la version 1.5 de Ant (resp. 1.6.1). Ci-dessous les liens directs vers les versions binaires.

Version Date de sortie
1.1 19/07/2000
1.2 24/10/2000
1.3 03/03/2001
1.4 03/09/2001
1.4.1 11/10/2001
1.5 10/07/2002
1.5.1 03/10/2002
1.5.2 03/03/2003
1.5.3 09/04/2003
1.5.4 12/08/2003
1.6.0 18/12/2003
1.6.1 12/02/2004
1.6.2 16/07/2004
1.6.3 28/04/2005
1.6.4 19/05/2005
1.6.5 02/06/2005
La JVM Microsoft n'étant pas supportée, le JDK doit être installé au préalable sur nos machines. Nous trouverons ici le JDK1.5 et le JDK1.4.2.
Dans les versions 1.6.4 et 1.6.5, les bugs suivants ont été fixés :
  1. Sun javah failed with java.lang.NoClassDefFoundError. Bugzilla report 34681 ;
  2. DirectoryScanner.slowScan() was broken. Bugzilla report 34722 ;
  3. DirectoryScanner.scan() could throw a NullPointerException on case-insensitive filesystems (read Windows or MacOS X) ;
  4. Get w/authentication failed with ArrayOutOfBoundsExceptions. Bugzilla report 34734 ;
  5. Granularity attribute for task was undocumented. Bugzilla report 34871 ;
  6. <unzip> and <untar> could leave file handles open on invalid archives. Bugzilla report 34893 ;
  7. propertyset threw NPE with nested, mapped propertysets ;
  8. <ftp> up to date calculations were wrong. Bugzilla report 34941 ;
  9. AntXMLContext.setCurrentTargets() is now public. Bugzilla report 34680 ;
  10. <move> was unable to replace existing files or write into existing directories. Bugzilla report 34962 ;
  11. <macrodef> with redefined default values was incorrect. Bugzilla report 35109 ;
  12. <javadoc> will convert backslashes to forwardslashes when generating file list by useexternalfile. Bugzilla report 27814.

Bien que la distribution binaire de Ant contienne quatre répertoires : bin, lib, docs et etc, seuls les deux premiers sont utiles pour démarrer. Pour installer Ant, choisissons un répertoire et plaçons-y la source. Le répertoire sera connu sous le nom de ANT_HOME. Pour nous faciliter la tâche, choisissons le chemin le plus court possible, par exemple, C:\\Ant\. En effet, sous Windows, lors d'une écriture disque, le nom des fichiers est stocké sous 2 formes. La première permet d'avoir des noms de fichiers de 255 caractères alors que la seconde, héritée du temps du DOS, impose le format 8.3 (CHAR[8]+'.'+ CHAR[3]).

Image non disponible
Avant de démarrer Ant, nous devons configurer notre Path ainsi :
  1. Ajouter le contenu du répertoire bin/ ;
  2. Créer la variable d'environnement ANT_HOME correspondant au répertoire d'installation de votre distribution ;
  3. Si ce n'est déjà fait, créer de même une variable d'environnement JAVA_HOME.
Dans le cas de Windows 2000, XP ou 2003, nous pourrons sans problème désactiver ce double nommage de fichiers :
  1. Ouvrir regedit ;
  2. Aller dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Filesystem ;
  3. Modifier DWORD (par défaut à 0) NtfsDisable8dot3NameCreation à 1 ;
  4. Relancer Windows.

II. STRUCTURE DU BUILD.XML

II-A. PROJECT

Les fichiers de construction de Ant sont écrits en XML. Chacun d'eux correspond à ce que nous appelerons un projet i.e, project. Ce dernier peut posséder jusqu'à quatre attributs et constitue la partie essentielle du fichier :

Attributs Description Optionnel
name Le nom du projet Oui
default La cible par défaut lorsqu'aucune autre n'est spécifiée Oui depuis la version 1.6.0
basedir Le répertoire de base d'où partent les chemins requis. Oui
description La description globale du fichier de construction Oui

Supposons que nous souhaitions créer un projet HelloWorld à la racine du système, en l'occurence C:\\HelloWorld, dans lequel nous placerions le fichier de construction. La déclaration du projet se ferait alors ainsi et la tâche main serait celle appelée par défaut :

build.xml
Sélectionnez
<?xml version="1.0" encoding="UTF-8"?>
   <project name="HelloWord" default="main" basedir=".">
   <description>
        Notre HelloWorld build file.
   </description>
   </project>

II-B. TARGET

Chaque projet défini une ou plusieurs cibles i.e., target. Une cible est un ensemble de tâches que nous souhaitons exécuter. Quand nous lançons Ant, nous pouvons sélectionner la cible principale. Si nous n'en spécifions aucune, celle par défaut sera lancée.

Une cible peut dépendre d'autres cibles. Nous pourrions par exemple avoir une cible de compilation et une autre pour créer un exécutable. Or, nous ne pouvons créer l'exécutable qu'une fois les sources compilées, la cible d'exécution dépend donc de la cible de compilation.

Imposer l'exécution des cibles de A à D s'écrira ainsi, mais nous devrons préserver le script de toute cyclicité. La construction échouerait irrémédiablement :
  1. <target name="A"/> ;
  2. <target name="B" depends="A"/> ;
  3. <target name="C" depends="B"/> ;
  4. <target name="D" depends="C,B,A"/>.

Établir des conditions sur les cibles s'écrira comme ci-dessous, mais sans contrainte, la cible sera toujours exécutée :
  1. <target name="build-module-A" if="module-A-present"/> ;
  2. <target name="build-own-fake-module-A" unless="module-A-present"/>.

Une cible peut contenir les attributs suivants :

Attributs Description Optionnel
name Le nom de la cible Non
depends La liste des cibles dont dépend cette cible Oui
if Le nom de la propriété qui doit être impérativement établie avant l'exécution de la cible Oui
unless Le nom de la propriété qui n'a pas besoin d'être établie avant l'éxécution de la cible Oui
description Une courte description de la fonction de la cible Oui

Définissons alors quatre cibles : l'initialisation init dont dépend la tâche de compilation compil dont dépend elle-même la tâche principale main et enfin, une tâche de nettoyage clean

build.xml
Sélectionnez
<?xml version="1.0" encoding="UTF-8"?>
   <project name="HelloWord" default="main" basedir=".">
   <description>
        Notre HelloWorld build file.
   </description>
   <target name="init" description="construit l'arborescence cible" >
   </target>
   <target name="compil" depends="init" description="compile les sources" >
   </target>
   <target name="main" depends="compil" description="génère l'archive" >
   </target>
   <target name="clean" description="nettoie tous les répertoires générés" >
   </target>
   </project>

II-C. PROPERTY

Un projet peut contenir un ensemble de propriétés. Une propriété i.e, property a un nom et une valeur. Par exemple, s' il y a une propriété « builddir » avec la valeur « build », alors elle peut être utilisée comme valeur d'argument ${builddir}/classes (équivaut à build/classes). Une propriété est « case-sensitive ».

Il est ainsi possible de définir plusieurs répertoires de travail :

build.xml
Sélectionnez
<?xml version="1.0" encoding="UTF-8"?>
   <project name="HelloWord" default="main" basedir=".">
   <description>
        Notre HelloWorld build file.
   </description>

   <property environment="env"/>
   <property name="src" value="${basedir}/src"/>
   <property name="build" value="${basedir}/build"/>

   <target name="init" description="construit l'arborescence cible" >
   </target>
   <target name="compil" depends="init" description="compile les sources" >
   </target>
   <target name="main" depends="compil" description="génère l'archive" >
   </target>
   <target name="clean" description="nettoie tous les répertoires générés" >
   </target>
   </project>

II-D. BUILT-IN PROPERTY

Ant possède lui aussi quelques propriétés qui lui sont propres i.e, built-in property : vous pouvez constater l'emploi de basedir dans le fichier de construction ci-dessus.

Propriété Description
basedir Le chemin de base du projet
ant.file Le chemin du fichier de construction
ant.version La version de Ant
ant.project.name Le nom du projet actuellement éxécuté
ant.java.version La version de Java utilisée

Par héritage, il permet l'accés à toutes les propriétés du système comme si elles avaient été définies en tant que simples propriétés. Par exemple, ${os.name} renvoie le nom du système opérant. La classe System Java maintient un ensemble de propriétés, des paires clé/valeur qui définissent des attributs du système de travail. Quand le Runtime démarre, les propriétés de système sont initialisées pour contenir des informations sur l'environnement système comprenant entre autres, l'utilisateur, la version du Runtime Java et même le type de séparateur fichier. (À lire : Setting Java Properties with Ant).

Propriété Description
java.version Version du JRE
java.vendor Fournisseur du JRE
java.vendor.url URL du fournisseur
java.home Répertoire d'installation Java
java.vm.specification.version Version de la spécification JVM
java.vm.specification.vendor Fournisseur de la spécification JVM
java.vm.specification.name Nom de la spécification JVM
java.vm.version Version de l'implémentation JVM
java.vm.vendor Fournisseur de l'implémentation JVM
java.vm.name Nom de l'implémentation JVM
java.specification.version Version de la spécification JRE
java.specification.vendor Fournisseur de la spécification JRE
java.specification.name Nom de la spécification JRE
java.class.version Numéro de version de classe Java
java.class.path Chemin de classe Java
java.ext.dirs Chemin de répertoire ou de répertoire externe
os.name Nom de l'OS
os.arch Architecture de l'OS
os.version Version de l'OS
file.separator Séparateur de fichiers
path.separator Séparateur de chemins
line.separator Séparateur de lignes
user.name Compte utilisateur
user.home Répertoire Home utlisateur
user.dir Répertoire de travail utilisateur

II-E. TASK

Une tâche i.e, task est une partie de code pouvant être exécutée. Elle peut avoir de multiples arguments et possède la structure suivante :

  1. <taskname attribute1="value1" attribute2="value2" ... /> où taskname est le nom de la tâche, attributeN est le nom de l'argument et valueN est la valeur de cet argument ;
  2. <taskname id="taskID" ... /> où taskname est le nom de la tâche et taskID est un identifiant pour cette tâche.

Bien que nous puissions implémenter nos propres tâches, un certain nombre d'entre elles sont fournies par défaut. Parmi lesquelles :

  1. Des tâches d'archivage : À noter que la tâche JLink est dépréciée.
    Tâche Description
    gunzip/bunzip2 Défait une archive GZip/BZip2
    gzip/bzip2 Génère une archive GZip/BZip2
    cab Génère une archive CAB Microsoft
    ear Génère une archive EAR
    jar Génère une archive JAR
    war Génère une archive WAR
    manifest Crée un fichier Manifest
    rpm Génère une archive RPM
    signjar Signe une archive jar par le biais de javasign
    tar Génère une archive TAR
    unjar Défait une archive JAR
    untar Défait une archive TAR
    unwar Défait une archive WAR
    unzip Défait une archive ZIP
    zip Génère une archive ZIP
    build.xml
    Sélectionnez
    <?xml version="1.0" encoding="UTF-8"?>
       <project name="HelloWord" default="main" basedir=".">
       <description>
            Notre HelloWorld build file.
       </description>
    
       <property environment="env"/>
       <property name="src" value="${basedir}/src"/>
       <property name="build" value="${basedir}/build"/>
    
       <target name="init" description="construit l'arborescence cible" >
       </target>
    
       <target name="compil" depends="init" description="compile les sources" >
       </target>
    
       <target name="main" depends="compil" description="génère l'archive" >
         <jar jarfile="${build}/HelloWorld.jar" basedir="${build}" >
           <manifest>
             <attribute name="MAIN-CLASS" value="HelloWorld" />
           </manifest>
         </jar>
       </target>
    
       <target name="clean" description="nettoie tous les répertoires générés" >
       </target>
       </project>
    
  2. Des tâches d'audit :
    Tâche Description
    jdepend Invoque JDepend (Infos produit)
    jprobe Invoque JProbe (Infos produit)
    mmetrics Invoque Metamata Metrics/WebGain Quality Analyzer sur des sources Java (Détails)
    maudit Invoque Metamata Metrics/WebGain QA à la fois sur les sources et le Byte-code résultant (Détails)
  3. Des tâches de compilation :
    Tâche Description
    depend Détermine les classes compilées dépréciées avec leurs sources respectives
    javac Compile des sources java
    jspC Lance le compilateur JSP
    netrexxc Compile des sources netrexx
    rmic Lance le compilateur rmic
    wljspc Lance le compilateur JSP associé à la solution Weblogic
    build.xml
    Sélectionnez
    <?xml version="1.0" encoding="UTF-8"?>
       <project name="HelloWord" default="main" basedir=".">
       <description>
            Notre HelloWorld build file.
       </description>
    
       <property environment="env"/>
       <property name="src" value="${basedir}/src"/>
       <property name="build" value="${basedir}/build"/>
    
       <target name="init" description="construit l'arborescence cible" >
       </target>
    
       <target name="compil" depends="init" description="compile les sources" >
         <javac  srcdir="${src}" destdir="${build}" debug="on" deprecation="on" optimize="off" >
           <include name="HelloWorld.java" />
         </javac>
       </target>
    
       <target name="main" depends="compil" description="génère l'archive" >
         <jar jarfile="${build}/HelloWorld.jar" basedir="${build}" includes="META-INF/**">
           <manifest>
             <attribute name="MAIN-CLASS" value="HelloWorld" />
           </manifest>
         </jar>
       </target>
    
       <target name="clean" description="nettoie tous les répertoires générés" >
       </target>
       </project>
    
  4. Des tâches de déploiement :
    Tâche Description
    serverdeploy Lance le service de déploiement à chaud spécifique au serveur d'application utilisé (Weblogic ou JOnAS)
  5. Des tâches de documentation :
    Tâche Description
    javadoc/javadoc2 Génère une documentation par le biais de javadoc
    stylebook Génère une documentation par le biais de Apache Stylebook
  6. Des tâches liées aux EJB :
    Tâche Description
    blgenclient Borland Application Server 4.5 et 5.x
    ddcreator Weblogic 4.5.1
    ejbc Weblogic 4.5.1
    iplanet-ejbc iPlanet Application Server 6.0
    ejbjar Borland Application Server 4.5 et 5.x, iPlanet Application Server 6.0, JBoss, JOnAS 2.4.x et 2.5, Weblogic 5.1 à 7.0, IBM WebSphere 4.0
    wlrun Weblogic 5.1 à 7.0
    wlstop Weblogic 5.1 à 7.0
  7. Des tâches d'exécution :
    Tâche Description
    ant Lance Ant sur un autre fichier
    antcall Appelle une autre cible au sein d'une première
    apply Exécute une commande système
    dependset Gère les dépendances entre fichiers
    exec Exécute une commande système
    java Exècute des classes java au sein d'une même VM ou de processus fils
    parallel Exécute plusieurs tâches en parallèle
    sequential Exècute des tâches en séquentiel
    sleep Endort le processus pendant une certaine durée
    subant Appelle une cible dans un ensemble de sous projets
    waitfor Bloque l'exécution jusqu'à ce qu'un certain nombre de conditions soient respectées
  8. Des tâches de manipulation de fichiers :
    Tâche Description
    attrib Change les attributs et permissions de fichiers/répertoires sous Windows
    checksum Créer un checksum pour un fichier
    chgrp Change le groupe propriétaire sous Unix
    chmod Change les permissions sur un fichier
    chown Change le propriétaire d'un fichier sous Unix
    concat Assemble un ensemble de fichiers vers une cible
    copy Copie un ensemble de fichiers dans un autre ou vers un répertoire
    delete Efface un fichier, un répertoire et toute sa sous-arborescence
    filter Remplace les tokens posés par une nouvelle valeur
    fixclrf Ajuste un fichier texte aux règles de convention d'une locale
    get Récupère un fichier posé sur un point distant par son url
    mkdir Crée un répertoire
    move Déplace un fichier vers un autre ou un répertoire
    patch Applique un patch aux sources originales
    replace Remplace l'occurence d'une chaîne de caractères par une autre
    sync Synchronise un répertoire cible avec un ensemble de fichiers
    tempfile Pose un propriété sur un fichier temporaire
    touch Change l'heure de modification d'un fichier
    build.xml
    Sélectionnez
    <?xml version="1.0" encoding="UTF-8"?>
       <project name="HelloWord" default="main" basedir=".">
       <description>
            Notre HelloWorld build file.
       </description>
    
       <property environment="env"/>
       <property name="src" value="${basedir}/src"/>
       <property name="build" value="${basedir}/build"/>
    
       <target name="init" description="construit l'arborescence cible" >
         <mkdir  dir="${build}"/>
       </target>
    
       <target name="compil" depends="init" description="compile les sources" >
         <javac  srcdir="${src}" destdir="${build}" debug="on" deprecation="on" optimize="off" >
           <include name="HelloWorld.java" />
         </javac>
       </target>
    
       <target name="main" depends="compil" description="génère l'archive" >
         <jar jarfile="${build}/HelloWorld.jar" basedir="${build}" includes="META-INF/**">
           <manifest>
             <attribute name="MAIN-CLASS" value="HelloWorld" />
           </manifest>
         </jar>
       </target>
    
       <target name="clean" description="nettoie tous les répertoires générés" >
         <delete includeEmptyDirs="true" >
            <fileset dir="${build}" />
         </delete>
    
       </target>
       </project>
    
  9. Des tâches d'extension Java :
    Tâche Description
    jarlib-available Vérifie et établit la présence d'une extension dans un FileSet ou un ExtensionSet
    jarlib-display Affiche les informations « Optional Package » et « Package Specification » contenues dans une archive JAR
    jarlib-manifest Génère un fichier Manifest déclarant toutes les dépendances d'une archive JAR
    jarlib-resolve Place le chemin d'une archive JAR dans une propriété spécifiée aprés validation
  10. Des tâches de logging :
    Tâche Description
    record Enregistre-les évenements survenus lors d'un build
  11. Des tâches d'emailing : À noter que la tâche mimemail est dépréciée :
    Tâche Description
    mail Envoie un email par SMTP
  12. Des tâches DotNet :
    Tâche Description
    csc Compile du code C#
    vbc Compile du code VB.NET
    jsharpc Compile du code J#
    ildasm Désassemble du code et des librairies .NET
    ilasm Assemble des fichiers .il
    wsdltodotnet Génère du code C# ou VB.NET à partir de fichier WSDL
    importtypelib Importe une librairie COM vers .NET
  13. Des tâches de préprocessing :
    Tâche Description
    antlr Invoque ANTLR sur une grammaire
    antstructure Génère une DTD correspondante au fichier de construction
    icontract Utilise IContract sur ces classes Java
    import Importe un autre fichier de construction au sein d'un projet
    javacc Invoque JavaCC sur une grammaire
    javah Génère des entêtes JNI à partir d'une classe Java
    jjdoc Invoque JJDoc pour JavaCC
    jjtree Invoque JJTree pour JavaCC
    macrodef Définit une nouvelle tâche comme template
    mparse Invoque MParse sur une grammaire
    nativetoascii Convertit des fichier natifs en ASCII
    presetdef Génère une définition basée sur la définition courante
    translate Identifie des tokens dans un fichier pour les remplacer par celles définies dans un fichier tiers
    xslt/style Gère un ensemble de documents via XSLT
  14. Des tâches propriété :
    Tâche Description
    available Instancie une propriété si une ressource est disponible
    basename Détermine le nom d'un fichier spécifié
    buildnumber Comptabilise le nombre de builds
    condition Pose une propriété si la condition est applicable
    dirname Retourne le répertoire où est contenu un fichier spécifié
    echoproperties Liste les propriétés courantes
    loadfile Charge un fichier texte au sein d'une propriété
    loadproperties Charge un fichier en tant que propriétés d'un projet Ant
    pathconvert Convertie un path vers une OS spécifique
    property Spécifie les propriétés d'un projet
    propertyfile Crée ou modifie un fichier de propriétés
    uptodate Change une propriété si un fichier cible est plus récent qu'un ensemble de sources
    whichresource Trouve une classe ou une ressource dans le Classpath
    xmlproperty Charge des propriétés à partir d'un fichier XML
  15. Des tâches réseau :
    Tâche Description
    ftp Implémente un client FTP capable d'envoyer, recevoir, lister ou effacer des fichiers ainsi que de créer des répertoires
    rexec Automatise une session Rexec
    scp Copie des fichiers au travers du protocole SSH
    setproxy Instancie des propriétés Java's web proxy
    sshexec Exécute une commande distante au travers de SSH
    telnet Automatise une session Telnet
  16. Des tâches SCM :
    Tâche Description
    cvs Permet la gestion des packages à partir de CVS
    cvschangelog Génère un fichier XML des changes logs d'un dépôt CVS
    cvsversion Récupère les versions d'un serveur et d'un client CVS
    cvspass Ajoute des entrées dans le fichier .cvspass
    cvstagfile Génère un fichier XML sur les différences entre deux TAGs dans le dépôt CVS
    clearcase Permet d'exécuter les commandes checkin, checkout, uncheckout, update, lock, unlock, mklbtype, rmtype, mklabel, mkattr, mkdir, mkelem, et mkbl (Détails)
    continuus/synergy Permet d'exécuter les commandes ccmcheckin, ccmcheckout, ccmcheckintask, ccmreconfigure, et ccmcreateTask (Détails)
    microsoft Visual Sourcesafe Permet d'exécuter les commandes vssget, vsslabel, vsshistory, vsscheckin, vsscheckout, vssadd, vsscp, et vsscreate (Détails)
    perforce Permet d'exécuter les commandes p4sync, p4change, p4edit, p4submit, p4have, p4label, p4counter, p4reopen, p4revert, et p4add (Détails)
    pvcs Permet à un utilisateur d'extraire les dernières sources d'un répertoire PVCS
    sourceoffsite Permet d'exécuter les commandes sosget, soslabel, soscheckin, et soscheckout (Détails)
    starteam Permet d'exécuter les commandes stcheckout, stcheckin, stlabel, et stlist (Détails)
  17. Des tâches test :
    Tâche Description
    junit Lance des tests à partir du framework JUnit (Infos produit)
    junitreport Fusionne différents fichiers XML établis par JUnit pour créer un rapport
    test Exécute un test unitaire au sein du framezork org.apache.testlet
  18. Des tâches diverses :
Tâche Description
defaultexclude Altère la cible par défaut en excluant certaines règles
echo Retourne un message vers le logger (par défaut la console)
fail Quitte Ant
genkey Génère une clé par l'intermédiaire de KeyStore
input Autorise les interactions utilisateur pendant le build
script Exécute un script Apache BSF
sound Joue un fichier son au terme d'un "build"
splash Affiche un "Splash Screen"
sql Lance une série de requêtes SQL par le biais de JDBC
taskdef Définit une tâche dans le projet courant
tstamp Établit les propriétés DSTAMP, TSTAMP et TODAY d'un projet
typedef Affecte la définition d'une tâche ou d'une propriété à un projet
xmlvalidate Vérifie la grammaire d'un fichier XML

II-F. PATH & CLASSPATH

Bien que ce ne soit pas trés lisible, nous pouvons spécifier les Paths et Classpaths en utilisant « : » ou « ; » comme séparateurs.

 
Sélectionnez
<pathelement path="/path/to/file2.jar:/path/to/class2;/path/to/class3" />

Ant convertira directement ces derniers vers le système approprié.

 
Sélectionnez
<classpath>
<pathelement  path="${classpath}"/>
<pathelement  location="lib/helper.jar"/>
</classpath>

L'attribut location spécifie un simple fichier ou un répertoire relatif à celui de base d'un projet. De plus :

 
Sélectionnez
<classpath>
<pathelement  path="${classpath}"/>
</classpath>

Peut-être abrégé ainsi :

 
Sélectionnez
   <classpath path="${classpath}">

Si nous souhaitons utiliser plusieurs fois le même chemin comme attribut, nous pouvons référencer le chemin comme suit. Par emploi de fileset, il devient ainsi possible d'inclure ou d'exclure un ensemble de fichiers des Path/Classpath.

 
Sélectionnez
<path id="base.path"/>
<pathelement  path="${classpath}"/>
<fileset  dir="lib">
<include  name="**/*.jar"/>
</fileset>
<pathelement  location="classes"/>
</path>

<path id="tests.path">
<path refid="base.path"/>
<pathelement  location="testclasses"/>
</path>

Le raccourci précédemment mentionné pour <classpath> est aussi valide pour <path>. Par exemple :

 
Sélectionnez
<path id="base.path">
<pathelement  path="${classpath}"/>
</path>

Peut-être écrit :

 
Sélectionnez
   <path id="base.path" path="${classpath}">

III. DÉMARRAGE

Démarrer Ant est simple. Une fois installé, tapez juste ant [options] [cible [cible2 … ]] dans une invite de commande. Lorsque rien n'est spécifié, Ant cherche un fichier build.xml dans le répertoire courant. S' il le trouve, il l'utilise comme un fichier de construction. Si vous utilisez l'option -find, Ant cherchera un fichier de construction dans les répertoires parents. Pour permettre à Ant d'utiliser un autre fichier, utilisez la commande ant -buildfile file, où file est le fichier que vous souhaitez utiliser.

Parmi les nombreuses options, retenez les deux suivantes pour votre tranquilité : -quiet, qui ordonne à Ant d'afficher moins d'informations sur la console lorsqu'il tourne et -verbose, réciproque de la première.

Il est aussi possible de spécifier une ou plusieurs cibles qui pourront être exécutées. L'option -projecthelp affiche la description du projet, si elle existe, correspondant à la liste des cibles du projet.

Options Description
-help, -h Affiche les options de la ligne de commande
-projecthelp, -p Affiche l'ensemble des cibles du projet
-version Affiche la version courante et quitte Ant
-diagnostics Affiche les informations pouvant aider à reporter un problème
-quiet, -q Affiche le minimum d'informations
-verbose, -v Affiche le maximum d'informations
-debug, -d Affiche les informations de débogage
-emacs, -e Affiche des informations de log pouvant être interprétées
-lib Spécifie un chemin où sont situées des librairies externes
-logfile , -l Spécifie un fichier de logs de sortie
-logger Spécifie la classe devant exécuter le logging
-listener Ajoute une instance de classe comme listener
-noinput Interdit les entrées interactives
-buildfile , -file , -f Spécifie le fichier de construction
-D<property>=<value> Spécifie une valeur pour un paramètre donné
-keep-going, -k Exécute toutes les cibles indépendantes de celles ayant échoué
-propertyfile Charge toutes les propriétés dans un fichier
-inputhandler Spécifie la classe qui jouera le rôle de Handler
-find , -s Cherche le fichier de construction spécifié jusqu'à la racine système puis l'exécute
-nice number Affecte une valeur au Thread principal, 5 étant celle par défaut
-nouserlib Lance Ant sans qu'il puisse faire appel aux librairies par défaut
-noclasspath Lance Ant sans aucun classpath
Vous aurez peut-être remarqué, ci-dessus, les trois notions suivantes sur lesquelles nous reviendrons dans un futur article :
  1. Listeners : En implémentant l'interface org.apache.tools.antBuildListener, Ant est capable de traiter des évenements liés au démarrage et à la terminaison d'une tâche, d'une cible ou du projet ou survenus lors du log d'un message ;
  2. Loggers : Ces derniers étendent les capacités d'un listener en écoutant les sorties standard et d'erreur standard ;
  3. InputHandlers : En implémentant l'interface org.apache.tools.ant.input.InputHandler, Ant est capable de lancer une requête à destination de l'utilisateur afin d'integrer sa réponse dans son comportement.

Pour plus d'informations : Running Ant.

Plusieurs tâches prennent en compte des arguments pouvant être passés en ligne de commande. Pour rendre plus simple le fait de spécifier des arguments, utilisez arg.

Attributs Description
value l'argument d'une simple ligne de commande
line une liste d'arguments d'une ligne de commande
file le nom d'un fichier, argument d'une simple ligne de commande
path un chemin à utiliser
Impératif
Il est indispensable de déclarer exactement l'un d'eux

IV. CONCLUSION

Cette seconde partie est basée essentiellement sur la documentation proposée par Apache sur son site officiel. Elle ne prend en compte que le minimum requis pour une compréhension élémentaire de l'outil. Elle s'adresse a un public francophone souhaitant une prise en main rapide. Ce dernier pourra ainsi, aprés quelques heures, bâtir ses propres applications Java par le biais de scripts Ant. Il devra cependant garder à l'esprit les règles suivantes :

  1. Placer le fichier de constuction principal (build.xml) dans le répertoire principal du projet ;
  2. Ne jamais mettre de référence vers les fichiers systèmes (Windows C: etc) dans le fichier de construction ;
  3. Toujours fournir un ensemble de cibles par défaut : init, build, install et clean ;
  4. La cible de nettoyage doit effacer tous les fichiers générés ;
  5. Utiliser la balise <description> pour commenter le code XML ;
  6. Ne jamais hésiter à répartir les différentes cibles dans différents fichiers.

Ant est devenu l'un des fondamentaux du monde Java. Il s'avère donc important de connaître et de comprendre cet outil. Nous pourrons ainsi apprécier dans une prochaine partie, la meilleure manière de concevoir ses propres tâches. D'ici là, je vous invite à parcourir les différentes ressources qu'offre Développez.com (ex., Comment déboguer un script Ant sous NetBeans ? de Vincent Brabant).

V. REMERCIEMENTS

Je tiens à remercier l'ensemble de l'équipe de Developpez.com pour ses suggestions et plus particulièrement Pierre Rodriguez et Vincent Brabant pour leur relecture.