Dernière mise à jour :2008-09-19

informatique

Apache Ant est un projet du groupe Apache-Jakarta. Son but est de fournir un outil écrit en Java pour permettre la construction d'applications (compilation de programmes et exécution d'autres tâches).

Ant, comparativement à d'autres outils de type «make», a la particularité d'être indépendant de toute plate-forme (Unix, Linux, Windows...). Il devient donc un outil fort intéressant dans le cas où on doit développer une application sur plusieurs plates-formes ou encore migrer une application d'une plate-forme vers une autre.

Ant repose sur un fichier de configuration au format XML. Ant fournit par défaut un groupe de tâches courantes représentées sous forme d'objet en langage Java. Ant fournit également la possibilité de créer ses propres objets Java pour exécuter des tâches plus spécifiques et non fournies avec l'application de base.

Le fichier XML de Ant

Pour en faire une brève description, le fichier de configuration d’Ant fonctionne de la façon suivante. Le fichier contient un ensemble de cibles (target). Chaque cible contient une ou plusieurs tâches. Certaines cibles peuvent être dépendantes d'autres cibles pour être exécutées.

Installation de Ant

Puisque Ant repose sur la technologie Java, il faut d'abord installer le JDK. Ant s'installe sur la majorité des plates-formes.

Sur Windows, il suffit de :

  • Dézipper à l'endroit désiré le fichier téléchargé ce qui cré un répertoire nommé jakarta-ant-version
  • Ajouter le chemin complet au répertoire bin de Ant (situé dans le répertoire «jakarta-ant-version») à la variable système PATH. Ceci vous permettra de pouvoir facilement appeler Ant n'importe ou dans l'arborescence du système
  • Ajouter une variable d'environnement ANT_HOME qui pointe sur le répertoire jakarta-ant-version créé lors de la décompression du fichier
  • S'assurer que la variable d'environnement JAVA_HOME pointe sur le répertoire contenant le JDK
  • Dans certain cas, il peut s'avérer nécessaire d'ajouter à la variable d'environnement CLASSPATH, les fichiers jar contenus dans le répertoire lib de Ant

Pour d'autres plates-formes, vous pouvez consulter la documentation d'installation sur le site ant.apache.org.

Note : Sous Windows XP et autres version de Windows, vous pouvez ajouter des variables d'environnement en effectuant un clic droit de la souris sur l'icône d'ordinateur situé sur le bureau de Windows et en choisissant «Propriétés» dans le menu contextuel. Dans la fenêtre «Propriétés système» qui s'affiche, cliquer sur l'onglet «Avancé». Dans cet onglet, cliquer sur le bouton «Variables d'environnement».

Exécution de Ant par la ligne de commande

Voici la syntaxe de base pour utiliser Ant en mode ligne de commande : ant [options] [cible]

Par défaut, Ant recherche un fichier nommé build.xml dans le répertoire courant. Si il trouve ce fichier, il exécute la cible par défaut.

Liste des principales options de Ant

Ant possède plusieurs options dont voici les principales :

  • -buildfile : Pour préciser le nom du fichier de configuration si différent de build.xml
  • -quiet : Pour obtenir un résumé d'informations lors de l'exécution
  • -verbose : Pour obtenir un maximum d'informations lors de l'exécution
  • -version : Pour afficher la version de Ant
  • -projecthelp : Pour afficher les cibles définies avec leurs descriptions
  • -D[nom]=[valeur] : permet de définir une propriété et de lui assigner une valeur

Le fichier build.xml de Ant

Comme son suffixe l'indique, c'est un fichier de type XML. Il doit donc commencer (comme tout fichier XML valide) par l'en-tête <?XML version="1.0" ?>.

L'élément racine du fichier XML est <project>.

Celui-ci peut contenir les attributs suivants :

  • name : Pour préciser le nom du projet.
  • default : Pour préciser la cible par défaut à exécuter.
  • basedir : Pour préciser le répertoire qui servira de référence pour localiser de façon relative les autres répertoires.

À ce stade du tutoriel de Ant, on pourrait créer un fichier build.xml minimal qui ressemblerait à ceci :

<?xml version="1.0" ?>
<project name="mon premier projet" default="compile" basedir=".">
</project>

Ceci est du XML valide, mais le fichier ne fonctionnerait pas encore correctement, car il lui manque la description de la cible compile définie dans l'attribut default.

Note : Comme tout fichier XML, vous pouvez ajouter des commentaires dans votre fichier build.xml de la façon suivante :

<!-- Exemple de commentaire -->

Les propriétés de Ant

Il est possible d'ajouter des propriétés dans le fichier build.xml en utilisant la balise <property>. La balise project est donc souvent suivie de balises property.

Voici les attributs de la balise property

  • name : Permet de définir le nom de la propriété
  • value : Permet d'attribuer la valeur de la propriété
  • file : Permet de préciser le nom d'un fichier qui contient la définition d'un ensemble de propriétés. Ceci permet d'éviter de se retrouver avec une liste considérable de balise property en début de fichier. Le fichier en question porte habituellement l'extenssion .properties
  • location : Permet de définir un fichier avec son chemin absolu qui peut être utilisé en remplacement de l'attribut value

Priorité d'utilisation des propriétés

Ant priorise toujours la première valeur de propriété qu'il rencontre. Par exemple, si vous créez un fichier build.xml contenant une propriété nommée version avec une valeur «1.0» et que vous appelez ensuite Ant à partir de la ligne de commande avec -Dversion=1.1, Ant utilisera alors 1.1 comme valeur pour la propriété version puisque la propriété définie dans la ligne de commande est exécutée par Ant avant de lire le fichier build.xml.

Utilisation des propriétés Ant dans le fichier build.xml

Pour utiliser une propriété définie dans le fichier build.xml, on doit utiliser la syntaxe suivante : ${nom_de_propriete}

Par exemple, si vous avez défini votre propriété «version» de la façon suivante :

<property name="version" value="1.0" />

vous pourrez vous servir de cette propriété de cette façon :

${version}

Les propriétés prédéfinies dans Ant

Il existe quelques propriétés prédéfinies dans Ant et utilisables dans vos fichiers build.xml. En voici la liste :

  • basedir : Même chose que l'attribut du même nom dans la balise project.
  • ant.file : Représente le chemin absolu du fichier build en cours de traitement.
  • ant.java.version : Représente la version de la JVM qui exécute Ant.
  • ant.project.name : Représente le nom du projet en cours d'utilisation.

Les groupes de fichiers

Ant possède une balise <fileset> qui permet de définir un groupe de fichiers qui devront être utilisés dans une tâche.

Voici la liste des propriétés de la balise <fileset>

  • dir : Permet de définir le répertoire racine de l'ensemble de fichiers
  • includes : Permet de définir une liste de fichiers à inclure
  • excludes : Permet d'indiquer une liste de fichiers à exclure

Exemple :

<fileset dir="abc" includes="**/*.java" />

ou encore

<fileset dir="abc">
<include name="**/*.java" />
</fileset>

Note : L'expression **/ permet de préciser d'inclure tous les sous répertoires du répertoire défini dans l'attribut dir. *.java permet de spécifier d'inclure tous les fichiers portant l'extension.java.

Les cibles dans Ant

Dans Ant, les cibles sont représentées par la balise <target>. Tel que décrit en introduction de ce document, une cible est regroupement de tâches à réaliser dans un ordre défini.

Voici la liste des attributs de la balise target :

  • name : Pour indiquer le nom de la cible.
  • description : Pour indiquer une courte description de la cible.
  • if : Permet de préciser une condition d'exécution.
  • unless : Permet présicer une condition d'exécution en se basant sur l'inexistence de la définition d'une propriété.
  • depends : Permet de spécifier une liste des cibles dont dépend la cible.

Les tâches dans Ant

Tel que décrit brièvement en introduction, une tâche est une unité de traitement représentée par un objet en langage Java. Ant fournit par défaut une série de tâches pour l'exécution de traitements standards.

voici une liste des principales tâches :

Tâches Ant de gestion des fichiers

  • chmod : Modifier les droits d'un fichier
  • concat : Permet de concaténer une série de fichiers pour en former un seul
  • copy : Copier un fichier
  • delete : Supprimer un fichier
  • get : Obtenir un fichier depuis une URL
  • mkdir : Créer un répertoire
  • move : Déplacer ou renommer un fichier
  • tempfile : Générer un nom pour un fichier temporaire
  • touch : Modifier la date de modification du fichier avec la date courante

Tâche Ant pour la gestion des archives

  • cab : Créer une archive cab de type Microsoft
  • ear : Créer une archive contenant une application J2EE
  • gunzip : Décompresser une archive
  • gzip : Compresser dans une archive
  • jar : Créer une archive de type jar
  • tar : Créer une archive de type tar
  • unjar : Décompresser une archive de type jar
  • untar : Décompresser une archive de type tar
  • unwar : Décompresser une archive de type war
  • unzip : Décompresser une archive de type zip
  • war : Créer une archive de type war
  • zip : Créer une archive de type zip

Tâche de gestion de l'exécution de Ant

  • ant : Exécuter un autre fichier de build
  • antcall : Exécuter une cible
  • fail : Arreter l'exécution de Ant
  • parallel : Exécuter une tâche en parallèle
  • record : Enregistrer les traitements de l'exécution dans un fichier journal
  • sequential : Exécuter une tâche en séquentielle
  • sleep : Faire une pause dans les traitements

Tâches Ant de gestion des propriétés

  • available : Définir une propriété si une ressource existe
  • condition : Définir une propriété si une condition est vérifiée
  • pathconvert : Définir une propriété avec la conversion d'un chemin de fichier spécifique à un OS
  • property : Définir une propriété
  • tstamp : Initialiser les propriétés DSTAMP, TSTAMP et TODAY avec la date et heure courante
  • uptodate : Définir une propriété en comparant la date de modification de fichiers

Tâches Ant de compilations Java

  • java : Exécuter une application dans la JVM
  • javac : Compiler des sources Java
  • javadoc : Générer la documentation du code source
  • rmic : Générer les classes stub et skeleton nécessaires à la technologie rmi
  • signjar : Signer un fichier jar

Autres tâches Ant

  • apply : Exécuter une commande externe appliquée à un ensemble de fichiers
  • cvs : Gérer les sources dans CVS
  • cvspass : Ajouter des entrée à un fichier .cvspass
  • dependset : Définir des dépendances entre fichiers
  • echo : Afficher un message
  • exec : Exécuter une commande externe
  • genkey : Générer une clé dans un trousseau de clé
  • get : Obtenir une ressource à partir d'une URL
  • mail : Envoyer un courrier électronique SMTP
  • replace : Remplacer une chaîne de caractères par une autre
  • splash : Afficher un Splash screen
  • sql : Exécuter une requête SQL
  • style : Appliquer une feuille de style XSLT à un fichier XML
  • taskdef : Ajouter une tâche au projet courant
  • typedef : Définir un nouveau type de données
  • XmlValidate : Vérifier la validité d'un fichier XML

Maintenant que nous connaissons un peu mieux le fonctionnement de Ant, passons à la pratique.

Exemple Ant avec la tâche echo

Tel que décrit ci-dessus, la tâche echo permet d'écrire dans un fichier ou d'afficher un message ou des informations durant l'exécution d'un traitement.

Voici la liste des principaux attributs de la tâche echo :

  • message : Le message à afficher
  • file : Le fichier dans lequel le message sera inséré
  • append : Valeur booléenne qui permet de préciser si le message est ajouté à la fin du fichier (true) ou si le contenu du fichier doit être écrasé et remplacé par le message fourni (false).

Exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Exemple echo avec Ant" default="init" basedir=".">
<!-- Cible d'initialisation par défaut -->
<target name="init">
<echo message="Debut des traitements" />
<echo>Fin des traitements du projet ${ant.project.name}</echo>
<echo file="${basedir}/log.txt" append="false" message="Debut des traitements" />
<echo file="${basedir}/log.txt" append="true" >Fin des traitements</echo>
</target>
</project>

Note : Si vous prévoyez utiliser des caractères accentués dans votre fichier XML, n'oubliez pas d'ajouter ISO-8859-1 dans l'attribut Encoding de l'en-tête XML.

Résultat de l'exécution :

Buildfile: build.xml

init:
     [echo] Debut des
     [echo] Fin des tr

BUILD SUCCESSFUL
Total time: 0 seconds

Exemple Ant avec la tâche mkdir

Tel que décrit ci-dessus, la tâche <mkdir> permet de créer un répertoire.

Cette tâche possède un seul attribut que voici :

  • dir : Sert à préciser le chemin et le nom du répertoire à créer

Exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Exemple mkdir avec Ant" default="init" basedir=".">
<!-- Cible d'initialisation par défaut -->
<target name="init">
<echo>Début des traitements du projet ${ant.project.name}</echo>
<echo>Création du répertoire abc</echo>
<mkdir dir="${basedir}/abc" />
<echo>Fin des traitements du projet ${ant.project.name}</echo>
</target>
</project>

Résultat de l'exécution :

Buildfile: build.xml

init:
     [echo] Début des traitements du projet Exemple echo avec Ant
     [echo] Création du rÚpertoire abc
    [mkdir] Created dir: C:\projects\progs\eclipse\plugins\org.apache.ant_1.7.0.
v200706080842\bin\abc
     [echo] Fin des traitements du projet Exemple echo avec Ant

BUILD SUCCESSFUL
Total time: 0 seconds

Exemple Ant avec la tâche copy

La tâche <copy> permet de copier un ou plusieurs fichiers.

Voici les principaux attributs de la tâche copy :

  • file : Permet d'indiquer le fichier à copier
  • overwrite : Valeur booléenne qui permet de spécifier à Ant si il faut écraser les fichiers cibles si ils sont plus récents. Cette valeur est à false par défaut.
  • todir : Pour indiquer le répertoire cible dans lequel les fichiers seront copiés.

L'ensemble des fichiers concernés par la copie doit être précisé avec une balise <fileset>.

Exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Exemple copy avec Ant" default="init" basedir=".">
<!-- Exemple de définition de propriétés Ant -->
<property name="projet.src.dir" value="test-src"/>
<property name="projet.target.dir" value="test-target"/>

<!-- Cible d'initialisation par défaut -->
<target name="init" description="Cible d'initialisation">
<echo>Début des traitements du projet ${ant.project.name}</echo>
<echo>Création du répertoire test-target</echo>
<mkdir dir="${basedir}/${projet.target.dir}" />
<echo>Copies des fichiers dans test-target</echo>
<copy todir="${basedir}/${projet.target.dir}" >
<fileset dir="${basedir}/${projet.src.dir}" >
<include name="**/*.txt"/>
<include name="**/*.xml"/>
</fileset>
</copy>
<echo>Fin des traitements du projet ${ant.project.name}</echo>
</target>
</project>

Résultat de l'exécution :

Buildfile: build.xml

init:
     [echo] Début des traitements du projet Exemple copy avec Ant
     [echo] Création du répertoire test-target
    [mkdir] Created dir: C:\projects\progs\eclipse\plugins\org.apache.ant_1.7.0.
v200706080842\bin\test-target
     [echo] Copies des fichiers dans test-target
     [copy] Copying 3 files to C:\projects\progs\eclipse\plugins\org.apache.ant_
1.7.0.v200706080842\bin\test-target
     [echo] Fin des traitements du projet Exemple copy avec Ant

BUILD SUCCESSFUL
Total time: 0 seconds

Auteur : sylbil

Date de mise en ligne : 2008-03-31 18:20:00

Aucun commentaire pour l'instant.