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