Ant - e-campus
Transcription
Ant - e-campus
Ant Introduction JeanJacques LE COZ Outils de construction de projets ➢ Pour livrer un produit logiciel ➢ Compiler ➢ Documenter ➢ Packager ➢ Déployer ➢ Automatisation de ces tâches ➢ Make, Ant Ant pour Java ➢ Outil populaire chez les développeurs ➢ Facile ➢ Souple ➢ Utilisation ➢ ➢ Standalone Intégrée dans un IDE Ant : produit Open Source ➢ Produit ➢ Groupe Open Source Apache ➢ Auteur : James Duncan Davidson ➢ Acronyme de « another neat tool » ➢ Écrit en Java ➢ Licence : Apache Software Licence Version 2.0 Ant et Make ➢ Comparaison avec Make ➢ Même notion de dépendances entre tâches ➢ Contrairement à Make, Ant est indépendant vis à vis de la plateforme ➢ Ant est extensible Ant : historique ➢ Au début Ant était un composant de Tomcat ➢ Devient un sousprojet de Apache Jakarta ➢ Première version en juillet 2000 ➢ Succès et standard de fait ➢ Promue en novembre 2002 comme projet à part entière. ➢ Version actuelle : 1.6.1 Anatomie d'un fichier Ant ➢ Par défaut un fichier Ant a pour nom build.xml ➢ Fichier XML ➢ Division en fonctions appelées target ➢ Dépendance entre target ➢ Exemple : <?xml version="1.0"?> <project default="init"> <target name="init"> </target> </project> Ant : dépendances ➢ Dépendances entre target Exécutée en premier Exécutée en dernier <?xml version="1.0"?> <project default="fin"> <target name="debut"> <echo message=''début''/> </target> <target name="fin" depends=''debut''> <echo message=''fin''/> </target> </project> Description et commentaires ➢ Description ➢ Par une section <description> ➢ Commentaires ➢ Par les commentaires XML <?xml version="1.0"?> <project default="init" name="Project Argon"> <description> premier projet avec ANT </description> <! XML commentaires > </project> Ant : propriétés ➢ Propriété ➢ Déclarée dans une section <property> ➢ Définie par un couple nom + valeur ➢ Le nom sert de référence dans le reste du build ➢ ${metal} ➢ La valeur est immutable ➢ Exemple : <property name="metal" value="beryllium"/> Propriétés déjà définies ➢ java.class.path ➢ os.name ➢ user.name ➢ user.home ➢ ant.version ➢ ant.file ➢ ant.project.name Noms d'attributs déjà définis ➢ Attribut file ➢ Permet de lire les propriétés à partir d'un fichier ➢ Attribut environment ➢ Permet d'accéder aux variables d'environnement avec pour préfixe le nom de la propriété ➢ Exemple <property name="databasefile" location="archive/databases/${metal}.db"/> <property file=''mesproprietes'' /> <property environment=''monenv'' /> Définition des dépendances ➢ Le build est divisé en target ➢ Exemple <target name="init"/> <target name="preprocess" depends="init"/> <target name="compile" depends="init,preprocess"/> <target name="package" depends="compile"/> Exécuter Ant ➢ Par ligne de commande ➢ Unix, Linux ou Windows ➢ $>ant ➢ Au sein d'un environnement de développement ➢ IDE multiples et variés ➢ Jedit, Jext, Jbuilder, IntelliJ IDEA, JDEE (Emacs), NetBeans, Eclipse, ... Sortie typique d'une exécution ➢ Exemple sur la sortie standard de la plateforme Buildfile: build.xml init: [mkdir] Created dir: E:\tutorials\ant\example\build [mkdir] Created dir: E:\tutorials\ant\example\dist compile: [javac] Compiling 8 source files to E:\tutorials\ant\example\build dist: [jar] Building jar: E:\tutorials\ant\example\dist\example.jar BUILD SUCCESSFUL Total time: 2 seconds Options de la ligne de commande ➢ Par défaut le fichier de configuration a pour nom build.xml ➢ Sinon il faut l'option buildfile <file> ou f <file> ➢ L'option D permet de positionner des propriétés ➢ Exemple : ➢ $>ant Dmetal=acier Écrire un build.xml (1) ➢ Compilation ➢ Section <javac srcdir="src"/> ➢ Autres attributs de la section javac Attribut Obligatoire srcdir O destdir N excludes N fork N includes N debug N optimize N verbose N failonerror N MemoryMaximumSize N Écrire un build.xml (2) ➢ Compilation (suite) ➢ Ant peut être configuré pour utiliser des compilateurs différents et dans une JVM différente ➢ Jikes, GCJ, ... ➢ Exemple : <javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac" memoryMaximumSize="128m"/> Écrire un build.xml (3) ➢ Créer une archive jar ➢ Section <jar> ➢ Exemple : <jar destfile="package.jar" basedir="classes"/> Attribut destfile basedir includes excludes Obligatoire O N N N Écrire un build.xml (4) ➢ Créer une archive jar (suite) ➢ Avec un manifest ➢ Exemple : <jar destfile="package.jar" basedir="classes"> <manifest> <attribute name="BuiltBy" value="${user.name}"/> <attribute name="Mainclass" value="package.Main"/> </manifest> </jar> Exemple de build.xml (1) <?xml version="1.0"?> <project default="dist" name="Project Argon"> <description>A simple Java project</description> <property name="srcDir" location="src"/> <property name="buildDir" location="build"/> <property name="distDir" location="dist"/> <target name="init"> <tstamp/> <mkdir dir="${buildDir}"/> <mkdir dir="${distDir}"/> </target> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${buildDir}"/> </target> Exemple de build.xml (2) <target name="dist" depends="compile"> <jar destfile="${distDir}/package${DSTAMP}.jar" basedir="${buildDir}"> <manifest> <attribute name="BuiltBy" value="${user.name}"/> <attribute name="MainClass" value="package.Main"/> </manifest> </jar> <jar destfile="${distDir}/packagesrc${DSTAMP}.jar" basedir="${srcDir}"/> </target> <target name="clean"> <delete dir="${buildDir}"/> <delete dir="${distDir}"/> </target> </project> Timestamp (1) ➢ Marquage de fichiers avec le temps ➢ Exemple : ➢ <jar destfile="package.jar" basedir="classes"/> ➢ <jar destfile="package${DSTAMP}.jar" basedir="classes"/> ➢ Si la tâche est invoquée le 15 avril 2004 ➢ Le fichier jar est nommé : package20040415.jar Timestamp (2) ➢ Propriétés ➢ Invoquées et initialisées avec la section <tstamp/> ➢ Au début du build Propriété Explication Exemple DSTAMP TSTAMP TODAY Date courante dont le format est aaaammjj Temps courant dont le format est hhmm Jour courant avec le mois en chaîne de caractères 20040415 1030 April 15 2004 Opérations sur le système de fichiers (1) ➢ Gestion de fichiers et répertoires ➢ Création et suppression de répertoires ➢ ➢ <mkdir dir="archive/metals/zinc"/> <delete dir="archive/metals/zinc"/> Opérations sur le système de fichiers (2) ➢ Gestion de fichiers et répertoires ➢ Copies, renommage et déplacement de fichiers et répertoires ➢ ➢ ➢ ➢ <copy file="src/Test.java" tofile="src/TestCopy.java"/> <move file="src/Test.java" tofile="src/TestCopy.java"/> <copy file="src/Test.java" todir="archive"/> <move file="src/Test.java" todir="archive"/> Opérations sur le système de fichiers (3) ➢ Création de fichiers zip et tar ➢ ➢ ➢ <zip destfile="output.zip" basedir="output"/> <gzip src="output.tar" zipfile="output.tar.gz"/> <unzip src="output.tar.gz" dest="extractDir"/> Opérations sur le système de fichiers (4) ➢ Modification du contenu des fichiers ➢ ➢ <replace file="input.txt" token="old" value="new"/> L'attribut summary=true permet d'afficher le nombre d'occurrences trouvées et remplacées. Opérations sur le système de fichiers (5) ➢ Désignation d'un ensemble de fichiers ➢ Avec la section <fileset> ➢ Attributs de <fileset> ➢ ➢ Obligatoire : dir Optionnels : defaultexcludes, includes, excludes, followsymlinks Opérations sur le système de fichiers (6) ➢ Exécution de fichiers ➢ Fichiers .class ➢ Section <java> ➢ Fichiers binaires ➢ ➢ Section <exec> Exemple : <exec dir="${chemin}/sgbdoo" executable="${opp}"> <env key="CLASSPATH" path="${chemin}"/> <arg value="sgbdoo.GerantVentesImpl"/> </exec> Chaînage de builds ➢ Il est possible de modulariser un build en plusieurs plus petits ➢ Évite l'aspect monolithique d'un seul build ➢ <ant antfile="subbuild.xml"/> ➢ Par défaut les property sont héritées par les sous build ➢ L'attribut inheritAll=''false'' évite ce comportement Métacaractères ➢ Ant accepte les wildcards ➢ Même sémantique que UNIX ➢ Caractères * et ? ➢ Exemple : <copy todir="archive"> <fileset dir="src"> <include name="*.java"/> </fileset> </copy> Conclusion ➢ Outil très puissant ➢ S'affranchit des plateformes comme Java ➢ Utilisé avec Java Standard et Java J2EE ➢ Intégré dans tous les IDE du marché ➢ Utilisé dans les approches Xtrem Programming et MDA Ressources ➢ Web ➢ Le site d'apache : www.apache.org ➢ Livres ➢ « ANT : The Definitive Guide » auteurs : Jesse Tilly, Eric M. Burke éditeur : O'Reilly ➢ « Java Development With Ant » auteurs : Eric Hatcher, Steve Loughran éditeur : Manning