Université Joseph Fourier

IMA

Année Universitaire 2004-2005

M1 Info

OGL –Outils de Génie Logiciel

TP

 

Concepteur: Didier DONSEZ

TP – Jakarta ANT

Liens :

http://www-adele.imag.fr/~donsez/cours/ant.pdf

http://www-adele.imag.fr/~donsez/cours/tpant.zip

http://ant.apache.org/manual/index.html

 

L’objectif de ce TP est de vous montrer la manipulation de ANT pour organiser vos projets de développement

 

Ex0: Installation de Jakarta ANT

Installez ANT à partir du lien http://ant.apache.org/bindownload.cgi sur votre poste si ce n’est pas déjà fait

Configurez les 2 variables d’environnement JAVA_HOME et ANT_HOME

Ajoutez %ANT_HOME%\bin à votre variable PATH Windows ou $ANT_HOME/bin à votre variable PATH Unix.

 

Ex1: Compilation Java

L’exemple compilejava comporte un build.xml qui permet d’organiser et de compiler un ensemble de source Java.

Regardez les targets disponibles dans le build.xml. Testez les. Corrigez les 2 erreurs présentes dans le fichier Hello.java

Ajoutez une target "execute" qui exécute la classe hello.Hello. Quelle tache faut il utiliser ? Le classpath doit comporter le jarfile produit !!!

 

Ex2: Compilation C#

L’exemple compilecsharp comporte un build.xml qui permet d’organiser et de compiler, un ensemble de source C# et de produire un exécutable pour .NET.

Regardez les targets disponibles dans le build.xml. Les tester.

Ajoutez une target "execute" qui exécute la classe hello.Hello. Quelle tache faut il utiliser ?

Remarque : Il faut que le SDK .NET soit installé sur votre poste de travail.

 

Ex3: Input

A partir de l’exemple compilejava modifié dans l’exercice 1, modifiez la target « execute » pour que l’utilisateur entre des arguments à ce programme (utiliser la tache <input>).

 

Ex4: Interactivité

A partir de l’exemple compilejava modifié dans l’exercice 1, écrivez une classe hello.HelloInteractive qui interroge elle-même l’utilisateur pour qu’il entre la liste de noms à saluer.

Ajoutez et testez la target « execute.interactive » avec cette classe. Pourquoi le programme est-il bloqué ?

Ajoutez une target « generate.run.script » qui génère un run.bat ou un run.sh selon la plate-forme de votre poste de travail qui contient la ligne de commande lançant le programme hello.HelloInteractive (utiliser la tâche <echo> et la condition if dans la target)

Remarque : la lecture de la saisie de l’utilisateur peut se faire avec la méthode BufferedReader.readLine()

  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

  String line=br.readLine();

 

Ex5: Déploiement de site Web par FTP

La tâche <ftp> permet de récupérer ou d’installer des fichiers à distance. Elle dépend d’une bibliothèque externe ! Laquelle ?

Téléchargez et installez cette bibliothèque et installer la ! Dans quel répertoire ?

Testez l’exemple uploadbyftp en déployant (upload) des documents (HTML, icones, images) sur une machine distante ftp://ufrima.imag.fr dans le répertoire public_html.

 

Ex6a: Développement d’une tâche ANT

ThumbnailizeTask doit réaliser une vignette à partir d’une image JPEG ou GIF. Cette tache est utile à la construction de site Web personnels comportant des photos !

Après avoir regarder la documentation ANT concernant le développement de tâches custom et regardez la tâche custom de les 2 exemples filestattask et myechotask , développez une version simplifiée de la tâche ThumbnailizeTask. Le code de « thumbnailization » pourra se retrouver à partir de l’exemple du Technical Tip http://developer.java.sun.com/developer/TechTips/1999/tt1021.html#tip1

Ce filtre pourra être utiliser dans des targets comme dans l’exemple suivant extrait du build.for.test.xml :

  <thumbnailize file="myimg.gif" tofile="t_myimg.gif" maxdim="128"/>

  <thumbnailize file="myimg.gif" todir="${webpages.dir}/thumbnail" maxdim="128"/>

  <thumbnailize dir="${src.dir}" todir="${webpages.dir}/thumbnail" maxdim="128"/>

 

Utilisez cette target avant la target transfer de l’exercice 5

 

La seconde version de ThumbnailizeTask accepte les FileSets comme la plupart des tâches de la distribution ANT.

  <thumbnailize todir="${webpages.dir}/thumbnail" maxdim="128">

    <fileset dir="${img.dir}" >

      <include name="**/*.jpg"/>

      <exclude name="**/t_*.jpg"/>

    </fileset>

  </thumbnailize>

Inspirez vous de l’implémentation de la tâche copy pour réaliser cette deuxième version de ThumbnailizeTask

Pour info, la tache <image> introduite dans Ant 1.6 fait ce travail !

 

Ex6b: Développement d’une tâche ANT

SlideshowTask génère un diaporama à partir des photos se trouvant dans un répertoire. Le diaporama est constitué d’une page d’index HTML contenant les vignettes (thumbnail) des photos et d’une page diapo HTML par photo contenant la photo et une barre de navigation. La barre de navigation permet de passer à la suivante, revenir à la précédente et de remonter à l’index.

Les attributs de la tâche sont :

dir: le répertoire dans lequel sont les photos et dans lequel les pages HTML sont générées.

maxdim: la hauteur ou largeur maximale des vignettes qui sont placées par défaut dans le sous répertoire .thumbnail du répertoire désigné par l’attribut dir

cols: le nombre de vignettes affichées (en largeur) dans la page d’index

timer: le délai de passage d’une diapo à une autre dans les documents diapo.

circular: drapeau indiquant si la transition de la dernière photo revient sur la première.

Par exemple, l’exécution de la tâche suivante sur un répertoire contenant 4 photos : im1.jpg, im2.jpg, im3.jpg, im4.jpg

  <slideshow dir="${photo.dir} " maxdim="128" cols="3"

timer="20" circular="yes"/>

 

génère la page d’index suivante et des pages de diapo similaire à la diapo3.htm

 

index.htm

<HTML><HEAD>

<TITLE>Diaporama</TITLE>

</HEAD>

<BODY><CENTER>

<H1>Diaporama</H1>

<TABLE COLS="3">

<TR>

<TD><A HREF="diapo0.htm"><IMG SRC=".thumbnail/im1.jpg"></A></TD>

<TD><A HREF="diapo1.htm"><IMG SRC=".thumbnail/im2.jpg"></A></TD>

<TD><A HREF="diapo2.htm"><IMG SRC=".thumbnail/im3.jpg"></A></TD>

</TR>

<TR>

<TD><A HREF="diapo3.htm"><IMG SRC=".thumbnail/im4.jpg"></A></TD>

<TD></TD>

<TD></TD>

</TR>

</CENTER>

</BODY>

</HTML>

 

diapo3.htm

<HTML><HEAD>

<TITLE>Diapo 3</TITLE>

<!-- Timer -->

<META HTTP-EQUIV="Refresh" CONTENT="20; URL=diapo0.htm">

</HEAD>

<BODY>

<CENTER>

<!-- Nav bar -->

<A HREF="diapo2.htm">&lt;&lt;</A>

&nbsp;[<A HREF="index.htm">Top</A>]&nbsp;

<A HREF="diapo3.htm">&gt;&gt;</A>

<BR>

<!-- Photo -->

<IMG SRC="im4.jpg">

</CENTER>

</BODY></HTML>

 

Conseil : reprenez le projet thumbnail pour démarrer slideshow.

 

Ex6c: Développement d’une tâche ANT

EncryptTask (resp. DecrytTask) chiffre (resp. déchiffre) des fichiers avec les algorithmes de cryptographie accessible par le JCE. Ces taches sont utiles pour protéger ses fichiers des curieux. Rappelons que l’usage de la cryptographie est à manipuler avec précaution en France et dans de nombreux pays !

 

Ex7: XSLT

La tâche <xslt> permet de transformer un document XML en un autre au moyen du feuille de style XSL-T

L’exemple xslt comporte un build.xml qui illustre une telle transformation.

Testez juste cet exemple.

 

Ex8: SQL

La tâche <sql> permet d’envoyer des ordres SQL à un SGBD relationnel via un driver JDBC

L’exemple sql comporte un build.xml qui illustre la création d’une base et la consultation de tables.

Testez juste cet exemple.

 

Ex9: Download avec GET

La tâche <get> permet de récupérer par téléchargement un document sur un site distant (par HTTP, HTPPS, …)

L’exemple downloadbyget comporte un build.xml qui illustre un tel téléchargement.

Testez juste cet exemple.

 

Ex10: LineNumberFilterReader

LineNumberFilterReader est un filtre qui ajoute les numéros de ligne en entête de chaque ligne

Implémentez et testez ce filtre.

 

Ex11: CCPFilterReader

CPPFilterReader est un filtre qui réalise la substitution de macros et inclusion de fichiers comme le fait CPP (#define, #ifdef, #ifndef, #include, …)

Implémentez et testez ce filtre.

 

Ex12: Automatisation des tests unitaires avec ANT

Vous ferrez cet exemple avec Ioannis PARISSIS.

Tester l’exemple junitant

 

Ex13: Sources Java en hypertexte

L’utilitaire javasrc présenté en cours par Jean-Marie Favre construit un ensemble de documents HTML permettant de naviguer dans un ensemble de sources Java via des hyperliens.

Cet utilitaire dispose d’une tache ANT.

Modifiez le build.xml de l’exercice 1 pour construire un ensemble de documents HTML (dans un répertoire htmlsrc) à partir de l’ensemble de sources Java présents dans le répertoire src

Faites de même avec l’utilitaire Java2HTML (http://www.java2html.com)

 

Ex14: Qualité d’un développement

L’utilitaire javanccs analyse la qualité d’un développement en Java à partir de sources et produit un rapport comportant plusieurs métriques qualité

Cet utilitaire dispose d’une tache ANT.

Modifiez le build.xml de l’exercice 1 pour produire ce rapport à partir de l’ensemble de sources Java présents dans le répertoire src

 

Ex15: Développement d’une autre tâche ANT

JoBo (http://www.matuschek.net/software/jobo/index.html) est un robot permettant de récupérer un site Web (documents HTML, images, ...) en suivant les hyperliens présents dans les documents HTML récupérés.

A partir des sources de JoBo, écrire une tâche ANT mettant en oeuvre JoBo pour la récupération de sites Web

  <robot

         rooturl="http://www-adele.imag.fr/~donsez/cours"

         todir="./mirror"

         ... others options (depth, mimefilter, ...) ...

  />

Remarque: il est possible que cette tâche existe désormais !

 

Ex16: Repeat

La tâche <repeat> permet de répeter l’exécution d’une cible

L’exemple repeattask comporte un build file qui illustre la répetition d’une cible.

Testez juste cet exemple il vous sera utile pour la suite.

 

Ex17: Mini-Projet : Un outil de publipostage (mailingpack)

Réaliser un outil de publipostage par mail à partir de fichier de données au format CSV et d’un fichier patron

 

Premièrement, regardez les exemples replace, script qui illustrent les tâches <script>, <scriptdef>, <replace>

 

Vous utiliserez entre autre les tâches <script>, <scriptdef>, <replace>, <mail>, <copy> … et les classes java.util.StringTokenizer.