Tutoriel sur une introduction rapide à Apache Ant (Partie 2)

Auteurs

| L'équipe Java | Vincent Viale |

Bien que je n'apprécie guère le XML , en partie à cause des problèmes de performance et de maintenance de code qu'il engendre, je l'ai découvert en 2001 par le biais d'une formidable solution nommée Another Neat Tool (Ant) . Cette dernière, Build Tool Open Source, était alors en passe de représenter pour le monde Java ce qu'était déjà Make pour celui du C.

Dans cette seconde partie, essentiellement basée sur la documentation officielle, nous allons plonger au cœur de la toute dernière version de ANT .

Pour réagir au contenu de cet article, un espace de dialogue vous est proposé sur le forum Commentez .

- Titre : Tutoriel sur une introduction rapide à Apache Ant (Partie 2)

- Auteurs : L'équipe Java , Vincent Viale

- Parution : 16 novembre 2005

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 L'équipe Java. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. INSTALLATION

- II. STRUCTURE DU BUILD.XML

- II-A. PROJECT

- II-B. TARGET

- II-C. PROPERTY

- II-D. BUILT-IN PROPERTY

- II-E. TASK

- II-F. PATH & CLASSPATH

- III. DÉMARRAGE

- IV. CONCLUSION

- V. REMERCIEMENTS

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

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]).

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

<?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.

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

<?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

<?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

<?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

<?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

<?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.

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

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

<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 :

<classpath>
<pathelement  path="${classpath}"/>
</classpath>

Peut-être abrégé ainsi :

<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.

<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 :

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

Peut-être écrit :

<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

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.