====== Introduction à Ant ======
**D'après http://www.fil.univ-lille1.fr/~routier/enseignement/licence/pl/tdtp/tp_ant.pdf**
===== Qu’est ce que ant ? =====
**extrait du TD ci-dessus.**
Ant est un projet du groupe Apache-Jakarta. Il permet l’automatisation des différentes tâches d’élaboration
d’un projet (compilation, exécution de tâches de pré et post-compilation, création d’archives jar, ...). Il
est au java ce que ''make'' est au C ou au C++. L’objectif principal de ant est d’accélérer et de faciliter les
tâches de compilation, distribution et déploiement des applications java.
La configuration de ant repose sur un fichier XML qui décrit les différentes tâches qui devront être
exécutées par l’outil. Il porte par convention le nom de //build.xml//. Le fichier de configuration contient
un ensemble de cibles (appellées //target//). Chaque cible contient une ou plusieurs tâches à réaliser et peut
avoir une dépendance avec une ou plusieurs autres cibles.
Etudions un exemple pour clarifier les choses :
On veut automatiser la création d’une archive jar contenant les classes compilées d’un projet et sa
javadoc. Il faut donc créer une tâche dédiée à la création et que l’on peut par exemple appeler ''distribution''.\\
Pour générer l’archive, il faut avoir compilé le projet et avoir généré sa javadoc. Cela correspond à deux autres tâches, ''compile'' et ''doc'', qui seront totalement indépendantes de la première.
La tâche ''distribution'' sera dépendante des tâches ''compile'' et ''javadoc'', ce qui veut dire que
''compile'' et ''javadoc'' seront executées avant ''distribution''.
Cet exemple illustre un des concepts essentiels de la gestion de projet avec ant : il faut, comme lors de la
conception orientée objet d’un projet, extraire les étapes atomiques de production du projet et tisser les
liens logiques qui existent entre elles.
===== Premier fichier build.xml =====
Prenez l'exemple suivant extrait de xxx.
Décompressez l'archive.
Ce projet est composé de deux classes :
....
Ouvrez le fichier ''build.xml'' à la racine du répertoire exemple/ avec un éditeur “simple” (qui
n’interprète pas le XML tels que emacs, vi, kate, ...).
Analysons ce fichier un peu plus en détails :
* On peut remarquer qu’il existe deux types de champs dans un fichier ant : des propriétés (''property''), qui correspondent à des variables locales au fichier, et des cibles (''target'') qui sont des tâches exécutables par ant. Il est possible d’accéder à une propriété que l’on a définie grâce à la syntaxe ''${nomDeLaPropriete}''. Chaque cible est exécutable en ligne de commande grâce à :
ant nomDeLaCible.
* ''''
Cette ligne définit notre projet en lui donnant un nom, une tâche cible par défaut et un répertoire
de base relatif à la position du fichier build.xml.
* ''''
définit une variable sources qui pointe vers le répertoire contenant les sources à compiler. Cette
variable est accessible dans le reste du fichier avec ''${sources}''.
* ''''
définit une cible qui a pour nom “initialization” et qui crée un répertoire nommé ''classes''.
* '' ''
définit une cible qui a pour nom ''compile'' et qui est dépendante de la cible ''initialization'',
c’est à dire que l’exécution de la cible ''compile'' provoque l’exécution préalable de la cible
''initialization''. Après l’initialisation, les sources contenues dans le répertoire ''src'' sont
compilées et les fichiers ''.class'' sont stockés dans le répertoire ''classes''.
==== Exercice 1 : tâches de base ====
- Dans une console, tapez ''ant initialization'' dans le répertoire qui contient le build. Observez maintenant le contenu du répertoire.
- Supprimez le répertoire ''classes'' puis exécutez la commande ''ant'' sans argument. Observez le contenu du répertoire courant puis du répertoire ''classes''.
- En utilisant la commande ''ant delete'', écrivez une cible "clean" qui supprime le répertoire ''classes''. (vous pouvez voir à la fin du [[http://www.fil.univ-lille1.fr/~routier/enseignement/licence/pl/tdtp/tp_ant.pdf|TD]] la syntaxe des principales tâches ant, ou bien regarder directement sur http://ant.apache.org/manual/ ''(delete)''.
- Modifiez maintenant le fichier ''build.xml'' de façon à ce que la cible ''clean'' soit exécutée à chaque appel de la cible ''compile''((utilisez la virgule pour séparer plusieurs dépendances)). Re-testez le tout. Attention, à la fin de la compilation, le répertoire ''classes'' doit évidemment exister.
- En utilisant la commande ''ant java'', écrivez une cible ''run'' qui compile le projet et qui exécute ''jug.util.Demo''. Modifiez également l’entête du fichier ''build.xml'' de façon à ce que cette cible soit exécutée par défaut.
- Ajouter une cible qui produit le .jar (voir http://skebir.developpez.com/tutoriels/java/ant/#LIII-C) puis une autre qui l'exécute.
Pour que le fichier jar du projet soit exécutable, il faut lui ajouter un fichier Manifest.
==== Exercice 2 : Ant et JUnit ====
Non terminé en particulier les fichiers d'exemples ne semblent pas correspondre au bon JUNIT il faudrait etre en junit.4... Mais le ant fonctionne
- Modifiez maintenant le fichier ''build.xml'' de façon à ce que la compilation prenne également en compte les tests.
- Ajouter une cible ''runtests'' qui utilise la commande junit.
===== Integration de ant à Eclipse `=====
Nous allons maintenant voir comment utiliser en même temps ant et eclipse.
- Lancez eclipse.
- Choisissez File -> New -> Java -> Java Project.
- Donnez un nom au nouveau projet, puis sélectionner la localisation existante,
- Cliquez sur Next puis sur Finish. L’exemple de la section précédente est maintenant importé dans eclipse.
- Vous pouvez maintenant voir le nouveau projet dans l’onglet package explorer sur la gauche. Remarquez que le fichier build.xml apparaît dans l’arborescence du projet. Double cliquez pour l’ouvrir.
- Le fichier est reconnu automatiquement comme un fichier ant.
- Placez vous par exemple sur une nouvelle ligne en dessous de '''' puis exécutez la combinaison ctrl + espace au clavier. Vous voyez apparaître la liste possible des balises ant autorisées à cet endroit.
- Cliquez maintenant sur Window -> Show view -> Ant. Une nouvelle fenêtre nommée Ant apparaît dans votre espace de travail.
- Faites un clic droit dedans et sélectionnez Add buildfiles....ou bien sélectionner un fichier et faîtes le glisser.
- Ajoutez alors le fichier ''build.xml'' de l’exemple 1. Vous voyez apparaître la liste des tâches ant que vous avez définies auparavant. Vous pouvez faire un clic droit sur chacune des tâches et les exécuter (Run as -> Ant build). Des raccourcis pour ces fonctionnalités sont disponibles sous forme d’icônes dans la fenêtre Ant.
===== Autres =====
- Ajoutez une cible doc au projet. Cette cible doit générer automatiquement la javadoc du projet dans un répertoire docs dont le nom doit être facilement paramétrable. N’oubliez pas de mettre à jour la cible clean pour qu’elle supprime ce répertoire.
- En vous inspirant de l’exemple ci-dessous, créez une nouvelle cible distribution qui crée une archive tar contenant le répertoire src, le répertoire rapport et le fichier build.xml.
===== Références =====
http://www.fil.univ-lille1.fr/~routier/enseignement/licence/pl/tdtp/tp_ant.pdf
http://www.vogella.com/articles/ApacheAnt/article.html
http://membres-liglab.imag.fr/donsez/cours/ant.pdf