NAnt est un langage de script adapté à la compilation de projets. les scripts NAnt sont simplement des fichiers XML. NAnt possède 3 concepts de base:
- les “targets” (cible): les targets rassemblent des ensembles de tâches. On peut dire très naïvement que ce sont les “méthodes” du script. La “target” lancée au démarrage est soit la target par défaut, soit celle définie lors du lancement (il peut aussi y en avoir plusieurs à lancer)
- les taches
- les propriétés: elles peuvent être définies en dehors du script lors du lancement
Tous ces éléments se retrouvent sous un noeud principal, le projet.
Si l’on s’arrète à cela, NAnt ressemble trait pour trait à MSBuild. Nous allons voir que non. Nant se détache de MSBuild sur plusieurs points. En particulier:
- On peut imbriquer les tâches dans des tâches, pour par exemple reproduire un graphe d’appel et pas seulement une séquence.
- la gestion des erreurs est plus simple
- la syntaxe des expression est très puissante et très extensible
On peut lancer un script via la ligne de commande de NAnt, ou embarquer nant dans une application (nous verrons plus tard comment et pourquoi).
NAnt est écrit en .Net, et vient de Ant son frère de Java. Toutes les tâches NAnt sont écrites en .Net est NAnt doc est très extensible.
Commençons par un script simple:
<?xml version="1.0" encoding="utf-8"?>
<project name="hello" default="main_target">
<target name="main_target">
<echo message="Hello from nant" />
</target>
<target name="other_target">
<echo message="Hello from nant (other)" />
</target>
</project>
La ligne de commande est la suivante: nant -buildfile:HelloFromNAnt_1.build
Changeons un peu la ligne de commande: nant -buildfile:HelloFromNAnt_1.build other_target
La cible a changé, par défaut le script pointe sur “main_target”, mais il est possible de choisir.
On peut aussi appeller une cible d’une autre cible:
<?xml version="1.0" encoding="utf-8"?>
<project name="hello" default="main_target">
<target name="main_target">
<echo message="Hello from nant" />
<call target="other_target" />
</target>
<target name="other_target">
<echo message="Hello from nant (other)" />
</target>
</project>
Lançons ce script:
Le prochain script montre une partie de la puissance de NAnt: les propriétés
<?xml version="1.0" encoding="utf-8"?>
<project name="hello" default="main_target">
<target name="main_target">
<echo message="Hello from nant" />
<call target="Target_${cible}" />
</target>
<target name="Target_A">
<echo message="Hello from A" />
</target>
<target name="Target_B">
<echo message="Hello from B" />
</target>
</project>
j’ai créé une propriété via la ligne de commande “cible”. et j’ai appellé la target “Target_${cible}” la syntaxe ${} permet d’executer une expresssion et pas seulement lire une variable. la chaîne résultante est devenue Target_B d’où le résultat.
Dans le prochain billet nous verrons les tâches les plus interessantes de NAnt.

