Premiers pas avec Apache Ant Par Guillaume BITAUDEAU
Premiers pas avec Apache Ant Par Guillaume BITAUDEAU Le 16/10/2003
Plan de la présentation l l l l l Qu’est-ce que c’est ? Pourquoi refaire un Make ? Installation Notions de bases et fonctionnement Exemple Créer sa propre tache Utilisation dans Eclipse Avantages/défauts Bibliographie
Qu’est-ce que c’est ? l « Another Neat Tool » … l Un outil ressemblant à Make l Entièrement en java l Réalisé par James Duncan Davidson pour compiler Tomcat l Licence « Apache Software license »
Pourquoi refaire un Make ? l Multi plateforme ¡ Pour les règles utilisées ¡ Pour son fonctionnement l Fichiers XML l Extensible en Java l Peut quand même exécuter une ligne de commandes !!!
Installation l Télécharger la dernière version à partir du site : http: //ant. apache. org/ l Décompresser l’archive l Mettre à jour les variables d’environnement : ¡ ANT_HOME=c: ant ¡ JAVA_HOME=c: jdk 1. 2. 2 ¡ PATH=%PATH%; %ANT_HOME%bin
Notions de bases et fonctionnement : les trois types principaux l Un fichier par projet : build. xml l Un « projet » par fichier ¡ <project name="My. Project" default= "mon. Target" basedir=". "> l Plusieurs ¡ <target name="compile" depends="init" description="compile the source " if/unless="ma. Prop. Is. Set"/ > ¡ Chaque l Plusieurs ¡ « target » par « projet » target n’est exécuté qu’une seule fois « task » par « target » <taskname id="task. ID" attribute 1="value 1" …/>
Notions de base et fonctionnement : les tasks indispensables (suite) l Les « property » : ¡ 5 méthodes pour les initialiser (valeur, réf, properties/ressource java, environnement) l l l <property name="ma. Prop" value="dist"/> <property file="foo. properties"/> <property environment="env"/> Non modifiables ¡ Utilisation : ¡ l l <property file="${ma. Prop}/la. Suite"/> <echo message="Number of Processors = ${env. NUMBER_OF_PROCESSORS}"/>
Notions de base et fonctionnement : les tasks indispensables (suite) l Les « Pattern. Set » ¡ Utilisation ¡ de *, ? , **, / <patternset id="sources"> <include name="std/**/*. java"/> <exclude name="**/*Test*"/> <includesfile name="${some-other-file}" if="some-other-file"/> <excludesfile name="some-file"/> </patternset> ¡ Attention aux exclusions par défaut
Notions de base et fonctionnement : les tasks indispensables (suite) l Les ¡ « Selectors » <classpath> <fileset dir="lib"> <include name="**/*. jar"/> </fileset> <dirset dir="${build. dir}"> <include name="apps/**/classes"/> <exclude name="apps/**/*Test*"/> </dirset> <filelist dir="le. Dir" files="foo. xml, bar. xml"> </classpath>
Notions de base et fonctionnement : les tasks indispensables (suite) l Les ¡ « token filtrers » <filter token="year" value="2000"/> <copy todir="${dest. dir}" filtering="true"> <fileset dir="${src. dir}"/> </copy> ¡ Attention aux fichiers non ASCII !!!
Notions de base et fonctionnement : les principales catégories de tasks (fin) l l l l l Archive Tasks Compile Tasks Deployment Tasks Documentation Tasks Execution Tasks File Tasks Remote Tasks Testing Tasks …
Exemple <project name="My. Project" default="dist" basedir=". "> <description> simple example build file </description> <!-- set global properties for this build --> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="init"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile --> <mkdir dir="${build}"/> </target>
Exemple (suite) <target name="compile" depends="init" description="compile the source " > <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile" description="generate the distribution" > <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <!-- Put everything in ${build} into the My. Project-${DSTAMP}. jar file --> <jar jarfile="${dist}/lib/My. Project-${DSTAMP}. jar" basedir="${build}"/> </target>
Exemple (fin) <target name="clean" description="clean up" > <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project>
Créer sa propre tache : le. java import org. apache. tools. ant. Build. Exception; import org. apache. tools. ant. Task; public class My. Very. Own. Task extends Task { private String msg; public void init () { //nothing to do } 2 public void execute() throws Build. Exception { System. out. println(msg); } } 1 4 public void set. Message(String msg) { 3 this. msg = msg; } (les conversions sont faites par Ant)
Créer sa propre tache : le. xml (fin) <project name="Own. Task. Example" default="main" basedir=". "> <taskdef name="mytask" classname="com. mydomain. My. Very. Own. Task"/> <target name="main"> <mytask message="Hello World! My. Very. Own. Task works!"/> </target> </project> l Le. java peut être complété pour ¡ Supporter l’intégration dans un GUI ¡ Faire des tâches plus complexes :
Utilisation dans Eclipse Editeur spécialisé l Exécution de Ant intégrée à Eclipse l
Avantages l l l / Défauts Multi plateforme. l Outil encore jeune. Documentations l Compatibilité entre les nombreuses sur différentes versions. Internet. l Performances? Extensible. XML facilement lisible. De plus en plus d’outils comme Eclipse le supportent
Bibliographie l Pour ¡ Le Ant : Site officiel de Ant : http: //ant. apache. org/ Ant et Eclipse : manuel d’Eclipse ¡ « Développons en java » de Jean Michel DOUDOUX : http: //perso. wanadoo. fr/jm. doudoux/java/dejae/i ndexavecframes. htm
- Slides: 19