05/01/2009

Créer un 'war' avec Eclipse et Ant

Dans la note précédente, il a été vu que l'on peut créer une archive 'jar' à partir d'un fichier de description 'jardesc' avec Eclipse. L'archive 'jar est utilisée pour exécuter une application JAVA sur une machine virtuelle JAVA (commande java sous DOS).

Dans le cas du déploiement d'une application 'web' JAVA, il convient d'exporter le projet Eclipse sous forme de WAR ( Web ARchive). L'archive peut ensuite être copiée dans le répertoire de déploiement d'un serveur Java. Dans le cas présent, la finalité sera de copier l'archive WAR dans le répertoire 'webapps' d'un serveur Tomcat.

Le format 'war' est en fait un 'jar' qui doit contenir un répertoire "WEB-INF" qui lui-même contient:

  • un descripteur de déploiement 'web.xml'
  • un répertoire 'classes' où sont placés les '.class' du code compilé
  • un répertoire 'lib' où se trouvent les librairies externes 'jar'

L'archive 'WAR' peut être générée à l'aide d'ANT. Il existe en effet une tâche ANT dédiée à cette opération. Le nom de cette tâche est 'war'. L'attribut 'destfile' permet de préciser le nom de l'archive war à créer. Et l'attribut 'webxml' permet de spécifier le nom du fichier web.xml à utiliser pour déployer l'application web.

Pour constituer le contenu de l'archive on utilise divers tags:

  • <classes> pour préciser où se trouvent le code compilé '.class'
  • <lib> pour les libraires '.jar' externes
  • <zipfileset> pour grouper des fichiers et des répertoires (dont on peut exclure des éléments)

Exemple de cible ANT pour la génération d'un WAR:

<property name="jsp.dir" value="WEB-INF/jsp" />   
<property name="css.dir" value="stylesheet" />   
<property name="xsl.dir" value="WEB-INF/stylesheet" />       
<property name="xml.dir" value="WEB-INF/xml" />   
<property name="tld.dir" value="WEB-INF/tld" />   
<property name="scripts.dir" value="scripts" />
<property name="onlineHelp.dir" value="help" />       
<property name="images.dir" value="images" />   

<target name="War">
<description>
Creates a War file to deploy on Tomcat 
</description>
<echo message="Creation du War" />

<war destfile="rep_destination/mon_appli.war" webxml="WEB-INF/web.xml">    
<classes dir="WEB-INF/classes"/>       
<lib dir="WEB-INF/lib" />
<fileset dir=".">
<include name="*.jsp" />
<include name="*.html" />
<include name="*.htm" />
</fileset>
<zipfileset dir="${jsp.dir}" prefix="WEB-INF/jsp" />                   
<zipfileset dir="${scripts.dir}" prefix="scripts" />
<zipfileset dir="${onlineHelp.dir}" prefix="help" />
<zipfileset dir="${images.dir}" prefix="images" />         
<zipfileset dir="${css.dir}" prefix="stylesheet" />   
<zipfileset dir="${tld.dir}" prefix="WEB-INF/tld" >
<exclude name="CVS" />             
</zipfileset>         
<zipfileset dir="${xsl.dir}" prefix="WEB-INF/stylesheet" />
<zipfileset dir="${xml.dir}" prefix="WEB-INF/xml" />         
</war>
</target>

 

Ressources:

Auteur: Euan MATEO

06/08/2008

Notes à propos d'ANT

ant_logo_large.gifANT est un utilitaire JAVA qui permet d'effectuer un certain nombre de tâches relatives à des projets JAVA:
- Compiler des classes JAVA
- Créer des archives jar, war, zip..
- manipuler des fichiers, dossiers (création, suppression..)
- ..

ANT se lance avec la commande 'ant' sous DOS (Windows), ex:
'ant nom_de_cible'

L'exéction d'ANT dépend d'un fichier de configuration xml, 'build.xml'.
Après avoir installé ANT (cf note sur l'installation de Ant), il faut donc créer et renseigner le fichier 'build.xml'.

L'élément racine est 'project'. Il rassemble un ensemble de tâches à effectuer, les 'target'. Il peut être accompagné des attributs:
- name: pour donner un nom au projet ANT
- basedir: pour renseigner le point de départ des chemins du projet
- default: pour préciser un élément cible (target) par défaut, qui sera utlisé si aucun élément cible n'est précisé.

L'élément 'property' permet de déclarer des variables qui seront utilisées dans le projet. Ses attributs usuels sont:
- name: nom de la variable
- value: valeur de la variable

'target' contient les tâches (Tasks) à effectuer. C'est le coeur des opérations ANT. Ses principaux attributs sont:
- name: le nom de la cible
- depends: précise si cette tâche dépend d'une autre tâche qui doit déjà être effectuée
- conditions: if, unless

Les 'Tasks' sont des tâches réalisables par ANT: compilation, manipulation de fichier ou répertoire, création d'archive..
Une liste des tâches et de leurs attributs est disponible dans la document d'ANT: manuel > 'Overview of Ant Tasks'
Quelques tâches courantes:
- delete: effacer un fichier ou un répertoire
- mkdir: créer un répertoire
- javac: compiler (voir la doc pour les options)
- jar: créer une archive au format jar
- war: créer une archive war (Web ARchive)
- java: exécuter du code JAVA ou un JAR, avec la machine virtuelle JAVA

Pour spécifier des librairies à l'aide de 'classpath', il existe principalement deux manières de faire:
- par éléments 'nested', ex:
<javac ...>
<classpath>
<pathelement location="..."/>
<pathelement path=""/>
<fileset dir="lib">
<include name=""**/*.jar"/>
</fileset>
</classpath>
</javac>
- par réference, ex:
<!-- On définit la ressource -->
<path id="ressources.lib">
<pathelement location='...'/>
<pathelement path=""/>
</path>
<!-- on appelle la référence pour lancer une tâche -->
<target ... >
<javac ... classpathref="ressources.lib">
</target>

ou
<target ... >
<javac ... >
<classpath refid="ressources.lib"/>
</javac>
</target>




Exemple complet de fichier 'build.xml':
<?xml version="1.0" encoding="iso-8859-1"?>

<project name="strutsStart" basedir="." default="compile">
<!-- Chemin du serveur (Tomcat) et du jre, pour la définition du classpath -->
<property name="tomcat.dir" value="C:/tomcat4.1"/>
<property name="tomcat.lib.dir" value="${tomcat.dir}/common/lib"/>
<property name="jdk.dir" value="C:/j2sdk1.4.2_17"/> 
<property name="jdk.lib.dir" value="${jdk.dir}/jre/lib"/>

<!-- chemins des répertoires de l'application -->
<property name="webinf.dir" value="WEB-INF"/>
<property name="src.dir" value="${webinf.dir}/sources"/>
<property name="classes.dir" value="${webinf.dir}/classes"/>

<!-- Classpath avec référence pour la compilation (javac) -->
<path id="classpath">
<pathelement location="${tomcat.lib.dir}/servlet.jar"/>
<pathelement location="${jdk.lib.dir}/rt.jar"/>
<fileset dir="${webinf.dir}/lib"/>
</path>

<!-- Tâche d'initialisation: création du répertoire contenant les classes -->
<target name="prepare">
<mkdir dir="${classes.dir}"/>
</target>

<!-- Tâche de compilation des sources -->
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
</target>
</project>



Référence:
- "Using Ant" dans le manuel apache-ant

Auteur: Euan MATEO

16/07/2008

Installer ANT

ANT est un utilitaire distribué par Apache, qui permet de compiler le code java de manière plus souple que le traditionnel 'javac'. Il permet entre autres d'utiliser des librairies externes lors de la compilation. Cette fonction est très utile (voire indispensable) pour compiler le code de projets Struts.

 Le code et la documentation sont téléchargeables sous forme d'une archive sur le site du projet:

:: Télécharger ANT ::

 Pour commencer à installer ANT, il faut télécharger l'archive, et la décompresser. Les répertoires 'bin' et 'lib' seront indispensables pour faire fonctionner l'application. Il est ensuite conseillé de copier ces répertoires dans un réperoire 'C:/ant'.

L'étape suivante consiste à signaler au système où se trouve le code pour éxecuter Ant. Il faut pour cela rajouter la variable système 'ANT_HOME', et lui attribuer le chemin 'C:/ant'. Il faut également rajouter une entrée à la variable 'PATH', qui est '%ANT_HOME%/bin' (ne pas oublier le point virgule avant). Attention de ne pas supprimer les autres variables 'PATH' déjà présentes. Il est ensuite préférable de supprimer la variable d'environnement 'CLASSPATH', si elle existe. En effet, elle risque de créer de la confusion avec Ant.

Pour tester ant, il suffit alors de taper la commande 'ant' dans une fenetre dos (cmd.exe).  Si ANT est bien reconnu, on devrait obtenir un message tel que: 'Buildfile: build.xml does not exist! Build failed'

Les instructions de compilation seront regroupées dans un fichier 'build.xml'. Pour lire le format xml, il faudra donc installer un parser xml pour l'environnement JAVA.

Remarque : Les slashes présents dans les chemins indiqués, sont à remplacer par des anti-slashes.

Auteur: Euan MATEO