Ant - e-campus

Transcription

Ant - e-campus
Ant
Introduction
Jean­Jacques 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 sous­projet 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="database­file" 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="Built­By" value="${user.name}"/>
<attribute name="Main­class" 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="Built­By" value="${user.name}"/>
<attribute name="Main­Class" value="package.Main"/>
</manifest>
</jar>
<jar destfile="${distDir}/package­src­${DSTAMP}.jar" basedir="${srcDir}"/>
</target>
<target name="clean">
<delete dir="${buildDir}"/>
<delete dir="${distDir}"/>
</target>
</project>
Time­stamp (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é : package­20040415.jar
Time­stamp (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="sub­build.xml"/>
➢ Par défaut les property sont héritées par les sous build
➢ L'attribut inheritAll=''false'' évite ce comportement
Méta­caractè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