Ant Sébastien Jean IUT de Valence Département Informatique v2.1, 10 novembre 2008
Qu est ce que ANT? Principes et installation Introduction Outil open-source du consortium Apache http ://ant.apache.org Version 1.1, juillet 2000 Version 1.7.0, décembre 2006 Make-like = gestion de production de logiciel Syntaxe basée sur XML (MAKEFILE = build.xml) Expression de cibles (de production) et de dépendances Ecrit en Java, interfaçable depuis Java Extensible, par définition de nouvelles tâches (écrites en Java) Intégré à la majorité des IDE, notamment Eclipse Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 1 / 33
Installation de ANT Principes et installation Installation Téléchargement de la distribution binaire actuelle (1.7.0) : apache-ant-1.7.0-bin.zip Décompression Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 2 / 33
Principes et installation Installation de ANT (fin) Installation Positionnement de variables d environnement Test! Déclaration de ANT_HOME, pointant sur l installation de Ant Déclaration de JAVA_HOME, pointant sur l installation du JDK/JRE Ajout de ANT_HOME/bin dans la variable d environnement PATH Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 3 / 33
Premier script Ant Principes et installation Projets, cibles, tâches Projet = Gestion de la production logicielle pour un cas particulier Cible = Opération de production (compilation, exécution,... ) Tâche = sous-opération élémentaire d une cible (appel au compilateur, affichage de message,... ) <?xml version="1.0" encoding="iso-8859-1"?> <project name="test"> <target name="echo1"> Projet Cible <echo message="test1 ant!" /> Tâche </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 4 / 33
Principes et installation Premier script Ant (suite) Projets, cibles, tâches Exécution Depuis le répertoire contenant le fichier build.xml Syntaxe : ant cible Depuis n importe où Syntaxe : ant -d cheminfichier cible Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 5 / 33
Principes et installation Premier script Ant (fin) Projets, cibles, tâches Possibilité de définir une cible par défaut <?xml version="1.0" encoding="iso-8859-1"?> <project name="test" default="echo1"> <target name="echo1">... </target> <target name="echo2">... </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 6 / 33
Ant et Java Compilation Compilation d une application Java Fichiers sources dans un sous-répertoire src du répertoire courant Une classe A, dans le paquetage fr.iutvalence.ant Une application TestA (utilisant A), dans le paquetage par défaut Première version du script Ant (dans le répertoire courant) <property /> : définition de propriété (variable d environnement locale au script), rappelée par ${...} basedir : propriété (modifiée via attribut éponyme du projet) indiquant le répertoire de base du projet <?xml version="1.0" encoding="iso-8859-1"?> <project name="monapp" default="compile" basedir = "."> <property name="src" value="src" /> <target name="compile"> <javac srcdir="${src}" destdir="${basedir}" </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 7 / 33
Ant et Java Compilation Compilation d une application Java (suite) Tâche javac : compilation Java (avec détection de modification) Attribut srcdir : arborescence contenant les fichiers.java à compiler Attribut destdir : répertoire où produire les fichiers.class Premier appel : les fichiers sont compilés Second appel : les fichiers ne sont pas recompilés (la tâche réussit) Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 8 / 33
Ant et Java Compilation Compilation d une application Java (suite) Version 2 : production des.class dans un sous-répertoire build <?xml version="1.0" encoding="iso-8859-1"?> <project name="monapp" default="compile" basedir = "."> <property name="src" value="src" /> <property name="build" value="build" /> <target name="compile"> <javac srcdir="${src}" destdir="${build}" </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 9 / 33
Ant et Java Compilation Compilation d une application Java (suite) Problème : le répertoire build n existe pas! Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 10 / 33
Ant et Java Compilation Compilation d une application Java (suite) Solution : 1 Définition d une cible init pour la création du répertoire build Utilisation de la tâche prédéfinie mkdir 2 Expression de dépendance entre les cibles compile et init <?xml version="1.0" encoding="iso-8859-1"?> <project name="monapp" default="compile" basedir = "."> <property name="src" value="src" /> <property name="build" value="build" /> <target name="init"> <echo message="output directory creation"/> <mkdir dir="${build}"/> </target> <target name="compile" depends="init"> <echo message="compilation"/> <javac srcdir="${src}" destdir="${build}" /> </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 11 / 33
Ant et Java Compilation Compilation d une application Java (fin) Attribut depends : dépendance vis-à-vis d une ou plusieurs cibles Exécution d une cible exécution préalable séquentielle de toutes les cibles dont elle dépend Syntaxe : <target... depends="nom1, nom2,... " >... Premier appel de compile : exécution de init création de build Second appel de compile : exécution de init sans effet Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 12 / 33
Ant et Java Exécution Exécution d une application Java Tâche java : exécution d une application Java Attribut classname : nom de la classe à exécuter Attribut classpath : classpath à utiliser (suite de chemins) <?xml version="1.0" encoding="iso-8859-1"?> <project name="monapp" default="compile" basedir = "."> <property name="src" value="src" /> <property name="build" value="build" /> <target name="init">... </target> <target name="compile" depends="init">... </target> <target name="run" depends="compile"> <echo message="execution..." /> <java classname="testa" classpath="${build}" /> </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 13 / 33
Ant et Java Exécution Exécution d une application Java (fin) Application TestA Affichage de A! puis arrêt Exécution de run = init compile run Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 14 / 33
L élément project Constructions du langage Project, Target Attributs : name : nom du projet Requis, valeur par défaut : néant default : nom de la cible par défaut Optionnel, valeur par défaut : nom de la première cible du fichier basedir : répertoire de référence du projet Optionnel, valeur par défaut : Répertoire contenant build.xml Exemple d utilisation : <project name="pipo" default="plop"> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 15 / 33
L élément target Constructions du langage Project, Target Attributs : name : nom de la cible Optionnel, valeur par défaut : néant depends : dépendances (séparées par, ) Optionnel, valeur par défaut : néant if : exécution subordonnée à l existence d une propriété Optionnel, valeur par défaut : néant unless : exécution subordonnée à l absence d une propriété Optionnel, valeur par défaut : néant description : description en langage naturel Optionnel, valeur par défaut : néant Exemple d utilisation : <target name="run" depends="compile" if="runnable"> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 16 / 33
L élément property Constructions du langage Propriétés et références Propriété = association d un nom et d une valeur Noms sensibles à la casse, valeurs non modifiables Quatre façons de définir une propriété via <property> 1 Via un couple {nom ; valeur} 2 Via un couple {nom ; référence} 3 Via un fichier de propriétés Localisé via les attributs file, resource ou url 4 Via une variable d environnement Spécifiée via l attribut environment Voir aussi : <propertyset>, gestion d ensemble de propriétés Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 17 / 33
Propriétés prédéfinies Constructions du langage Propriétés et références Disponibles dans tout script Ant Deux catégories : Propriétés héritées de l environnement Java (cf. docs JDK) java.version, java.home, java.class.path, java.ext.dirs,... os.name, os.version,... file.separator, path.separator, line.separator user.name, user.home, user.dir Propriétés spécifiques à Ant basedir : répertoire de référence du projet ant.file : chemin absolu du script ant.version, ant.java.version, ant.project.name Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 18 / 33
Références Constructions du langage Propriétés et références Association d un identifiant, via l utilisation de l attribut id, à n importe quel élément du projet Rappel via l utilisation de l attribut refid de certaines tâches <project... > <path id="project.class.path"> <pathelement location="lib/"/> <pathelement path="${java.class.path}/"/> <pathelement path="${additional.path}"/> </path> <target... > <rmic...> <classpath refid="project.class.path"/> </rmic> </target> </project> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 19 / 33
Constructions du langage Eléments <path> et <classpath> Chemins et arguments Alternative à la définition via attributs éponymes Intérêt : factorisation par référence Ajout de chemins via sous-éléments : <pathelement> Attribut path : liste de chemins séparés par : ou ; Attribut location : fichier/répertoire (chemin relatif / basedir) <fileset> <filelist> <dirset> <path> (pour <path> uniquement) + attribut refid Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 20 / 33
Elément <arg> Constructions du langage Chemins et arguments Spécification d arguments de ligne de commande Trois types d arguments Chemin de localisation de fichier/répertoire Spécification via attribut file Liste de chemins de localisation de fichier/répertoire Spécification via attributs path ou pathref Autres arguments Exemples : Spécification via attribut value : un seul argument (avec/sans espace) Spécification via attribut line : plusieurs arguments séparés par espace <arg path="/a ;b ;c/d" />, <arg line="-pipo -plop" /> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 21 / 33
Constructions du langage Elément <patternset> Sélection de ressources Regroupement de fichiers/répertoires correspondant à des modèles Chemins relatifs par rapport au répertoire de base d une tâche <patternset id="monpattern"> <include name="**/*.java"/> <exclude name="**/*test*"/> </patternset> Sous-éléments <include> et <exclude> Ajout de fichiers/répertoires par inclusion/exclusion Attribut name : expression de modèle * : n importe quelle suite de caractères (evt. vide)? : n importe quel caractère ** (spécial) : n importe quel niveau d une arborescence Attributs if et unless : inclusion/exclusion conditionnelle Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 22 / 33
Elément <filelist> Constructions du langage Sélection de ressources Construction de listes de fichiers Attribut dir (requis) : répertoire de base pour la sélection Ajout de fichiers dans la liste via sous-éléments <file> Attribut name (requis) : nom du fichier (modèle interdit) <filelist id="javafiles" dir="${src}"> <file name="testa.java"/> <file name="fr/iutvalence/ant/a.java"/> </filelist> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 23 / 33
Constructions du langage Sélection de ressources Eléments <fileset> et <dirset> Construction de listes de fichiers ou de répertoires, via des modèles Attribut dir (requis) : répertoire de base pour la sélection Attribut casesensitive (optionnel) Modèles sensibles à la casse (ou non) Attribut followsymlinks (optionnel) Suivi (ou non) des liens symboliques Ajout de fichiers via sous-éléments <patternset> Possibilité d utiliser directement <include>/<exclude> <fileset dir="${src}" casesensitive="yes"> <patternset id="sources"> <include name="**/*.java"/> <exclude name="**/*test*"/> </patternset> </fileset> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 24 / 33
Sélecteurs Constructions du langage Sélection de ressources Modèles complexes utilisables dans un élément fileset Pas uniquement basés sur la syntaxe du nom du fichier Deux types de sélecteurs : Sélecteurs de base = modèles Sélecteurs conteneurs = compositions de modèles Elément <selector> Définition de sélecteur à l extérieur de <fileset> pour utilisation par référence Attributs id, if et unless Un seul sous-élément sélecteur <selector>, sélecteur de base, sélecteur conteneur Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 25 / 33
Sélecteurs de base Constructions du langage Sélection de ressources <contains> <date> Sélection si occurrence d une chaîne de caractères dans le contenu Sélection si antérieur ou postérieur à une date donnée <depend> <depth> Sélection si plus récent qu un fichier équivalent ailleurs Sélection si localisation à une profondeur donnée de l arborescence <different> Sélection si contenu différent d un fichier équivalent ailleurs <filename> Sélection si correspondant à un modèle de nom donné Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 26 / 33
Sélecteurs de base Constructions du langage Sélection de ressources <present> Sélection si fichier équivalent existe ou non ailleurs <containsregexp> <size> <type> Sélection si occurrence d une expression régulière dans le contenu Sélection si taille inférieure ou supérieure à une taille donnée Sélection si fichier ou répertoire <modified> Sélection si modification (algorithme de détection configurable) Voir aussi : <signedselector> et <scriptselector> Possibilité d écrire ses propres sélecteurs, en Java Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 27 / 33
Sélecteurs conteneurs Constructions du langage Sélection de ressources <and> Sélection si sélectionné par tous les sélecteurs encapsulés <majority> <none> <or> <not> Sélection si sélectionné par la majorité des sélecteurs encapsulés Sélection si sélectionné par aucun des sélecteurs encapsulés Sélection si sélectionné par au moins un des sélecteurs encapsulés Sélection si non sélectionné par le sélecteur encapsulé (unique) <selector> Sélection si sélectionné par le sélecteur encapsulé (unique) Attributs if et unless pour exécution conditionnelle Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 28 / 33
Tâches conteneurs Tâches Ant Parallélisme de tâches Contrôle du parallélisme d exécution d un ensemble de tâches Elément <sequential> Exécution séquentielle de l ensemble de tâches encapsulées Elément <parallel> Exécution parallèle de l ensemble de tâches encapsulées Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 29 / 33
Gestion de fichiers Tâches Ant Tâches prédéfinies <copy> Copie de fichiers et répertoires <copy todir="../dest/dir"> <fileset dir="src_dir"> <exclude name="**/*.java"/> </fileset> </copy> Voir aussi : <delete>, <move>, <attrib>, <touch>, <mkdir>, <get> <sync>, <chgrp>, <chmod>, <chown>, <patch>, <concat>, <zip>... Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 30 / 33
Java Tâches Ant Tâches prédéfinies <javac> <java> Compilation de codes sources Java Exécution d application Java (ou de jar exécutable) <javadoc> <jar> Production de documentation Création d archive jar <jar destfile="testant.jar" basedir="."> <include name="build"/> <manifest> <attribute name="main-class" value="testa"/> </manifest> </jar> Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 31 / 33
Autres tâches optionnelles Tâches Ant Tâches prédéfinies <ftp> Transferts de fichiers via FTP <sshexec> <scp> Exécution d une commande sur un ordinateur distant via SSH Copie de fichiers à distance sécurisée via SSH <telnet> <image> Etablissement et gestion d une session TELNET Manipulation d images (redimensionnement,... ) <splash> Affichage d un «splash screen» Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 32 / 33
Tâches Ant Tâches prédéfinies Fin! Sébastien Jean (IUT Valence) Ant v2.1, 10 novembre 2008 33 / 33