Langage de commandes Ant Langage de commandes Ant

Transcription

Langage de commandes Ant Langage de commandes Ant
TP – master 2 IPINT – Université de Lille 1
Année Universitaire 2011/2012
Langage de commandes Ant
Langage
de commandes
Ant
Cedric
Dumoulin
[email protected]
Cedric Dumoulin
((C)Gautier Koscielny, Jérôme Moroy)
((C)Gautier Koscielny, Jérôme Moroy)
Introduction
L‟outil ANT a été développé en complément des outils comme make ou gnumake afin
de compiler, packager et configurer sur tous types de plates-formes des applications
logicielles programmées en langage Java.
« ANT » est l‟acronyme de “Another Neat Tool”, clin d‟oeil aux outils du type YACC.
ANT est indépendant de la plate-forme puisque lui-même écrit essentiellement en
Java. ANT a été conçu pour automatiser des taches complexes et répétitives. Il
devrait donc rapidement devenir votre outil favori pour automatiser vos procédés de
fabrication standard de bibliothèques de composants logiciels (une des joies de votre
future profession).
Installation
Vous n‟avez rien à faire. ANT est déjà installé dans Eclipse.
Néanmoins, si vous souhaitez installer ANT et l‟utiliser en complément d‟autres outils,
vous trouverez la distribution à l‟URI suivante :
http://jakarta.apache.org/ant/index.hml
Dans ce cas, une fois la distribution installée, vous devrez, sous Unix, faire pointer le
répertoire bin de cette installation dans la variable d‟environnement PATH.
Une variable ANT_HOME pointe sur le répertoire d‟installation.
Petit manuel de ANT
Un fichier de commandes ANT se présente comme un Makefile, à la différence près
que ce fichier est écrit en XML et que de manière standard, nous appelons build.xml.
Un éditeur standard suffit mais Eclipse (toujours lui) vous fournit un environnement
intégré de gestion de ANT (codes couleurs, configurateur, lanceur automatique,
analyseur, etc.).
Pour le moment, vous allez étudier l‟exemple suivant de fichier build.xml avant de
passer aux travaux pratiques.
1/5
TP – master 2 IPINT – Université de Lille 1
Année Universitaire 2011/2012
< ?xml version= “1.0” ?>
<project name= “test” default=”compile” basedir= “..” >
<property name=”src.dir” value=”src” />
<property name=”classes.dir” value=”classes” />
<target name=”init”>
<mkdir dir=${classes.dir}” />
</target>
<target name=”compile” depends=”init”>
<javac srcdir=”${src.dir}” destdir=”${classes.dir}” />
</target>
</project>
Décomposons le fichier pas à pas :
< ?xml version= “1.0” ?>
Puisque les fichiers de construction ANT sont des fichiers XML, le document
commence par une declaration XML qui indique quelle version de XML est utilisée
afin que l‟outil puisse déterminer la version automatiquement si cela devient
nécessaire.
<project name= “test” default=”compile” basedir= “.” >
L‟élément racine du fichier build est l‟élément project. Il possède trois attributs :
 name : il s‟agit du nom du projet, constitué de caractères alphanumériques
valides pour XML
 default : il s‟agit de la règle à exécuter par défaut quand aucune règle n‟est
fournie en ligne de commande par l‟utilisateur ou automatiquement par un
autre outil. C‟est le seul attribut obligatoire parmi les trois.
 basedir : c‟est le répertoire de base depuis lequel tout chemin relatif est utilisé
dans le fichier build.xml. Si l‟attribut est omis, le répertoire parent du fichier
build.xml sera utilisé.
<property name=”src.dir” value=”src” />
<property name=”classes.dir” value=”classes” />
L‟élément property permet de déclarer des propriétés correspondant à des
constantes définies par l‟utilisateur utilisées et référencées ensuite dans le reste du
document. Une propriété est un couple nom/valeur. La valeur du nom et de la valeur
sont contraints par les règles de nommage XML (caractères d‟échappement).
La référence à une propriété nom est réalisées en utilisant la construction ${ nom }
comme vous le constaterez plus tard dans le document.
<target name=”init”>
<mkdir dir=${classes.dir}” />
2/5
TP – master 2 IPINT – Université de Lille 1
Année Universitaire 2011/2012
</target>
L‟élément target permet d‟encapsuler une séquence d‟action. Nous l‟appellerons
règle. Une règle possède un nom que vous pouvez référencer dans d‟autres règles
ou à l‟extérieur du document, automatiquement ou en ligne de commande.
L‟appel à une règle dans une autre règle est effectuée syntaxiquement par le mot-clé
depends .
Dans l‟exemple, la règle s‟appelle init (pour „initiate‟ ou en vieux français
„initialisation‟) et l‟action provoquée par son appel se limite à la création d‟un
répertoire en utilisant la commande ant mkdir.
Vous constatez que le mécanisme des règles défini dans ANT est identique au
mécanisme qui régit les dépendances d‟un fichier Makefile.
Finalement, un fichier ANT constitue un graphe acyclique orienté de dépendances de
règles.
Une règle peut avoir différents attributs :
 name : le nom de la règle qui permet de la référencer. C‟est le seul attribut
obligatoire.
 depends : il s‟agit d‟une liste de règles séparées par des virgules dont
dépend cette règle dépend. Par exemple, la règle compile dépend de init.
Autrement dit, les dépendances s‟exécuteront avant cette règle. Attention à ne
pas introduire de cycle dans les dépendances même si ANT les détecte.
 if : attribut utile qui permet de spécifier une condition sur l‟exécution de la
règle en se basant sur la valeur d‟une propriété. Par exemple, « if= ”linux” »
peut être utilisé pour indiquer que les instructions doivent être exécutées si la
propriété linux a été définie et possède n‟importe quelle valeur.
 unless : effet inverse du if (la règle s‟exécute à moins que la valeur de la
propriété ait été fixée).
 description : une description utile de la règle. Une option de ant permet de
lister les règles et toutes leurs descriptions (essayer l‟option --projecthelp).
<target name=”compile” depends=”init”>
<javac srcdir=”${src.dir}” destdir=”${classes.dir}” />
</target>
Comme indiqué précédemment, la règle compile dépend de l‟exécution de la règle
init pour être exécutée.
L‟instruction de la règle consiste à exécuter la commande javac. Les instructions sont
toujours définies dans le corps d‟une règle.
Dans le cas présent, l‟instruction va prendre les fichiers sources dans le répertoire
pointé par srcdir et va compiler les classes dans le répertoire cible destdir
Vous découvrirez d‟autres options de cette règle d‟ici la fin du TP.
3/5
TP – master 2 IPINT – Université de Lille 1
Année Universitaire 2011/2012
Un projet typique
Nous vous suggérons d‟organiser chacun de vos projets en cinq répertoires :
 src : c‟est le répertoire dans lequel vos sources doivent être placées
 bin : c‟est le répertoire dans lequels sont placés les fichiers compilés par
Eclipse
 classes : c‟est le répertoire dans lequel sont placés les fichiers compilés par
ant
 build : c‟est l‟endroit où toutes les librairies et autres fichiers construits par
ant doivent être placés.
 etc : c‟est l‟endroit fourre-tout où vous allez placer les fichiers de
configuration de votre projet, les images, des scripts, etc.
 ant : c‟est là que sera le fichier build.xml et d‟autres fichiers de configuration.
src, bin, ant et etc seront créés dans Eclipse à la création du projet. En revanche, le
répertoire build sera créé ou effacé par une commande ANT.
Travail (facultatif)
Dans cette section, nous avons découpé étapes par étapes le travail à réaliser en TP.
L‟utilisation d‟Eclipse devrait vous simplifier le travail à mettre en œuvre.
Pour chaque étape, nous vous demandons d‟écrire la documentation de votre code et
de générer automatiquement la documentation avec la commande javadoc ANT.
Classe simple
Définissez une classe Java simple qui affiche la date courante dans une console.
Compilez et exécutez cette classe à travers des commandes ANT en respectant
l‟architecture de projet indiqué dans la section précédente.
La compilation doit permettre de débuguer la classe et de vérifier qu‟elle n‟utilise pas
des méthodes obsolètes (choisissez les bons paramètres de compilation).
Exécuter la commande sous Eclipse et effectuer la même opération en ligne de
commande (il faut définir la variable $ANT_HOME).
Classe utilisant une ressource externe
Créez un répertoire images dans le répertoire etc.
Copier une image quelconque dans ce répertoire (gif de préférence).
Définissez dans Eclipse un package dessipint.graphics.
Définissez une classe Java appartenant au package dessipint.graphics qui affiche une
image dans un bouton. (l‟image sera chargée par un programme principal. L‟image
sera passée sous forme d‟objet au composant graphique. De cette manière, la
construction du bouton ne dépend pas d‟une image particulière).
Créez ensuite une classe principale (sans paquetage) qui va créer ce composant
graphique et qui affiche l‟image contenue dans le répertoire build.
La commande ANT doit copier automatiquement l‟image dans le répertoire build lors
de la construction des classes.
4/5
TP – master 2 IPINT – Université de Lille 1
Année Universitaire 2011/2012
Compilez le composant graphique dans une règle ANT. Compilez la classe principale
dans une autre règle et exécutez le programme. Tout doit être réalisé avec des
commandes ANT.
Importation des propriétés ANT depuis un fichier
Définir toutes les propriétés dans le fichier build.xml peut devenir cauchemardesque.
De plus, vous vous apercevrez que certaines propriétés sont réutilisables de projets
en projets.
Déterminez donc un moyen d‟externaliser les propriétés déclarées dans le fichier
build.xml dans un fichier de propriétés que vous créerez dans le répertoire ant.
Compilez et exécutez votre programme.
Configuration de librairies
Conservez les règles précédentes.
Dans des projets de développement classique, les classes sont rarement délivrées
telles quelles. Elles sont distribuées sous forme de librairies (java archive).
Le but de cette dernière étape est double :
 construire des archives avec ANT ;
 être capable d‟y mettre des données et de s‟y référer dans le code.
Vos classes seront maintenant encapsulées dans des librairies. Vous séparerez les
classes en deux archives :
 l‟une s‟appelant dessipint-graphics.jar contenant les composants graphiques,
 l‟autre contenant le programme principal s‟appelant tp-main.jar.
La ressource image doit être également encapsulée dans la librairie tp-main.jar.
La difficulté ici est de pouvoir récupérer dans le code de la classe principale l‟URI de
l‟image afin de la charger dans le composant graphique.
Compilez, packagez l‟application et exécutez le tout avec des règles ANT.
5/5

Documents pareils