org/int/asso/asf/Ant.html
<!--#include virtual="/header-start.html" -->
<title>Ant</title>
<meta content="https://jakarta.apache.org/ant" name="url"/>
<!--#include virtual="/header-end.html" -->
<p>Fourmi : une petite chose qui peut construire de grandes choses.</p>
<section>
<h2>Besoin</h2>
<p>Offrir un outil semblable à <a href="/tech/info/soft/proj/impl/Make.html">make</a> mais portable et extensible
grâce à <a href="/org/us/company/oracle/sun/ptf/java">Java</a>.</p></section>
<section>
<h2>Conception<q></q></h2>
<p>Ant exécute :</p>
<ul>
<li>un <strong>projet</strong> définissant
<ul>
<li> un ensemble de <strong>cibles </strong>(<em>targets</em>)
<ul>
<li>exécutant des <strong>tâches</strong> (<em>tasks</em>), réalisées par des classes Java </li>
<li><strong>standards</strong> (livrées avec Ant)
<ul>
<li><strong> autonomes </strong>(<em>core tasks</em>)</li>
<li><strong>optionnelles </strong>(optional tasks) car dépendantes d'autres librairies (comme <a
href="/tech/info/soft/prod/JUnit.html">JUnit</a>, BCEL, etc.)</li>
</ul>
</li>
<li>non standards (non livrées avec Ant) telle que
<ul>
<li>des tâches fournies par des produits commerciaux (<a
href="/org/us/company/oracle/bea/wls">WebLogic</a>, LiDO, etc.)</li>
<li>des tâches que vous écrivez vous-même</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Tout projet est paramétrable via les <a href="/org/us/company/oracle/sun/ptf/java/SystemProperties.html"><strong>propriétés </strong>système</a>
de Java.</p></section>
<section>
<h2>Implémentation</h2>
<p>Tout projet Ant est défini via un fichier <a href="/tech/info/soft/data/doc/xml/">XML</a>.</p>
<p>Ant peut lire une <a href="/org/us/company/oracle/sun/ptf/java/SystemProperties.html">propriété système</a> via la
syntaxe
<code><strong>${</strong><em>nomPropriété</em><strong>}</strong></code>. Cela lui permet de lire les propriétés
fixées par la plate-forme Java (<code><strong>${java.class.path}</strong></code> par exemple) comme les propriétés
que vous ajoutez (via un fichier <code>.properties</code> ou des arguments
<code><strong>-D</strong><em>propriété</em><strong>=</strong><em>valeur</em></code> sur la ligne de commande).</p>
<section>
<h3>Ecriture d'une tâche</h3>
<p>Chaque tâche Ant est réalisée par une classe implémentant l'interface <code>Task</code>.</p></section>
</section>
<section>
<h2>Notes</h2>
<ul>
<li>Supporté par de nombreux IDE (<a href="../../../../java/TCC.html">TCC</a>, NetBeans, JEdit, <a
href="/org/int/asso/ef/product/eclipse">Eclipse</a>, IDEA, etc.)</li>
<li>L'exécution de tâches de type shell est toujours possible via la tâche <code><exec></code></li>
<li>
<table>
<thead>
<tr>
<td rowspan="2">Ant</td>
<th> Version</th>
<th colspan="7">1</th>
<th>2</th>
<th rowspan="3"> Commentaire</th>
</tr>
<tr>
<th> Release</th>
<th>1</th>
<th>2</th>
<th>3</th>
<th colspan="2">4</th>
<th colspan="2">5</th>
<th>0</th>
</tr>
<tr>
<th>Domaine</th>
<th> Fixpack</th>
<th></th>
<th></th>
<th></th>
<th>0</th>
<th>1</th>
<th>0</th>
<th>1</th>
<th></th>
</tr>
<tr>
<th rowspan="2">Ant</th>
<th>Sous-projet</th>
<td class="oui" colspan="8"><code><a href="https://ant.apache.org/manual/CoreTasks/ant.html">ant</a></code>
</td>
<td></td>
</tr>
<tr>
<th>Appel de cible</th>
<td class="non">Non</td>
<td class="oui" colspan="7"><code><a
href="https://ant.apache.org/manual/CoreTasks/antcall.html">antcall</a></code></td>
<td></td>
</tr>
<tr>
<th>SGBD</th>
<th><a href="/tech/info/soft/data/dbms/r/sql">SQL</a></th>
<td class="non">Non</td>
<td class="oui" colspan="7"><code><a href="https://ant.apache.org/manual/CoreTasks/sql.html">sql</a></code>
</td>
<td></td>
</tr>
<tr>
<th>Propriétés</th>
<th></th>
<td class="oui" colspan="8"><code><a href="https://ant.apache.org/manual/CoreTasks/property.html">property</a></code>
</td>
<td>Constantes ou lecture depuis un fichier</td>
</tr>
<tr>
<th rowspan="3">Archives</th>
<th><a href="/org/us/company/oracle/sun/ptf/java/JAR.html">JAR</a></th>
<td class="oui" colspan="8"><code><a href="https://ant.apache.org/manual/CoreTasks/jar.html">jar</a></code>
</td>
<td></td>
</tr>
<tr>
<th>WebApp</th>
<td class="non">Non</td>
<td class="oui" colspan="7"><code><a href="https://ant.apache.org/manual/CoreTasks/war.html">war</a></code>
</td>
<td></td>
</tr>
<tr>
<th>Enterprise ARchive</th>
<td class="non" colspan="3">Non</td>
<td class="oui" colspan="5"><code><a href="https://ant.apache.org/manual/CoreTasks/ear.html">ear</a></code>
</td>
<td></td>
</tr>
<tr>
<th rowspan="2">Exécution</th>
<th><a href="/org/us/company/oracle/sun/ptf/java/vm/">JVM</a></th>
<td class="oui" colspan="8"><code><a href="https://ant.apache.org/manual/CoreTasks/java.html">java</a></code>
</td>
<td>Possibilité d'utiliser la JVM exécutant Ant ou une autre (fork), permettant ainsi de fournir des jvmargs
(classpath, -D, etc.)
</td>
</tr>
<tr>
<th>Programme externe</th>
<td class="oui" colspan="8"><code><a href="https://ant.apache.org/manual/CoreTasks/exec.html">exec</a></code>
</td>
<td></td>
</tr>
<tr>
<th>Développement</th>
<th>Compilation</th>
<td class="oui" colspan="8"><code><a
href="https://ant.apache.org/manual/CoreTasks/javac.html">javac</a></code></td>
<td></td>
</tr>
<tr>
<th>Documentation</th>
<th>API Java</th>
<td class="non">Non</td>
<td class="oui" colspan="7"><code><a
href="https://ant.apache.org/manual/CoreTasks/javadoc.html">javadoc</a></code></td>
<td></td>
</tr>
<tr>
<th rowspan="8">Système de fichiers</th>
<th>Déplacement</th>
<td class="non">Non</td>
<td class="oui" colspan="7" rowspan="3"><code><a
href="https://ant.apache.org/manual/CoreTasks/move.html">move</a></code></td>
<td></td>
</tr>
<tr>
<th>Renommage</th>
<td class="oui"><code>rename</code></td>
<td></td>
</tr>
<tr>
<th>Renommage d'extension</th>
<td class="oui"><code>renameext</code></td>
<td></td>
</tr>
<tr>
<th>Copie de fichier</th>
<td class="oui"><code>copyfile</code></td>
<td class="oui" colspan="7" rowspan="2"><code><a
href="https://ant.apache.org/manual/CoreTasks/copy.html">copy</a></code></td>
<td></td>
</tr>
<tr>
<th>Copie de répertoire</th>
<td class="oui"><code>copydir</code></td>
<td></td>
</tr>
<tr>
<th>Suppression de répertoire</th>
<td class="oui"><code>deltree</code></td>
<td class="oui" colspan="7" rowspan="2"><code><a href="https://ant.apache.org/manual/CoreTasks/delete.html">delete</a></code>
</td>
<td rowspan="2"></td>
</tr>
<tr>
<th>Supression</th>
<td class="non">Non</td>
</tr>
<tr>
<th>Création de répertoire</th>
<td class="non" colspan="8"><code><a
href="https://ant.apache.org/manual/CoreTasks/mkdir.html">mkdir</a></code></td>
<td></td>
</tr>
<tr>
<th rowspan="2">Qualité</th>
<th>Audit de code</th>
<td colspan="8"><code><a href="https://ant.apache.org/manual/OptionalTasks/jdepend.html">jdepend</a></code>
</td>
<td>Optionnel</td>
</tr>
<tr>
<th>Tests unitaires</th>
<td colspan="8"><code><a href="https://ant.apache.org/manual/OptionalTasks/junit.html">junit</a></code></td>
<td>JUnit doit se trouver dans le classpath</td>
</tr>
<tr>
<th>Déploiement</th>
<th>J2EE</th>
<td colspan="8"><code><a href="https://ant.apache.org/manual/OptionalTasks/serverdeploy.html">serverdeploy</a></code>
</td>
<td>Générique, Jonas 2.4, <a href="/org/us/company/oracle/bea/wls">WLS</a></td>
</tr>
<tr>
<th>EJB</th>
<th></th>
<td colspan="8"><code><a href="https://ant.apache.org/manual/OptionalTasks/ejb.html">ejbjar</a></code></td>
<td>Optionnel. BES 4.5, iPlanet 6.0, JBoss 2.1 et ultérieurs, WLS 5.1/6.0 avec weblogic.ejbc, WAS 4.0, TOPLink
for WLS 2.5.1, JOnAS 2.4.x et 2.5
</td>
</tr>
</thead>
</table>
</li>
</ul>
</section>
<section>
<h2>Exemples</h2>
<p>Un exemple de script Ant est :</p>
<blockquote><code><<strong>project name</strong>=<span class="codeString">"MyProject"</span>
<strong>default</strong>=<span class="codeString">"dist"</span> <strong>basedir</strong>=<span class="codeString">"."</span>><br>
<br>
<<strong>description</strong>>Exemple simple de script Ant</<strong>description</strong>><br> <br> <span
class="codeComment"><!-- Fixe les propriétés
globales pour ce script --></span><br>
<<strong>property name</strong>=<span class="codeString">"src"</span> <strong> location</strong>=<span
class="codeString">"src"</span>/><br>
<<strong>property name</strong>=<span class="codeString">"build"</span> <strong>location</strong>=<span
class="codeString">"build"</span>/><br>
<<strong>property name</strong>=<span class="codeString">"dist"</span> <strong>location</strong>=<span
class="codeString">"dist"</span>/><br> <br>
<<strong>target name</strong>=<span class="codeString">"init"</span>><br> <span class="codeComment"> <!-- Crée l'horodatage
--></span><br>
<<strong>tstamp</strong>/><br> <span class="codeComment"><!-- Crée la structure
de répertoires de destination de compilation --></span><br>
<<strong>mkdir dir</strong>=<span class="codeString">"<strong>${</strong>build<strong>}</strong>"</span>/><br>
</<strong>target</strong>> <br> <br>
<<strong>target name</strong>=<span class="codeString">"compile"</span> <strong>depends</strong>=<span
class="codeString">"init"</span> <strong>description</strong>=<span class="codeString">"Compile
les sources"</span> ><br> <span class="codeComment"><!-- Compile le code source
Java depuis ${src} vers ${build} --></span><br>
<<strong>javac srcdir</strong>=<span class="codeString">"<strong>${</strong>src<strong>}</strong>"</span>
<strong>destdir=<span class="codeString">"${</span></strong><span class="codeString">build}"</span>/><br>
</<strong>target</strong>><br> <br>
<<strong>target name</strong>=<span class="codeString">"dist"</span> <strong>depends</strong>=<span
class="codeString">"compile"</span> <strong> description</strong>=<span class="codeString">"Génère
la distribution"</span> ><br> <span class="codeComment"><!-- Crée le répertoire
de distribution --></span><br>
<<strong>mkdir dir=<span class="codeString">"${</span></strong><span class="codeString">dist}/lib"</span>/>
<br> <span class="codeComment"><!-- Met tout ce qui est dans
${build} dans le fichier MyProject-${DSTAMP}.jar --></span><br>
<<strong>jar jarfile=</strong><span
class="codeString">"<strong>${</strong>dist}/lib/MyProject-${DSTAMP}.jar"</span> <strong>basedir=<span
class="codeString">"${</span></strong><span class="codeString">build}"</span>/><br>
</<strong>target</strong>> <br> <br>
<<strong>target name</strong>=<span class="codeString">"clean"</span> <strong>description</strong>=<span
class="codeString">"Nettoyage"</span>
><br> <span class="codeComment"><!-- Efface les arborescences
de ${build} et ${dist} --></span><br>
<<strong>delete dir=<span class="codeString">"${</span></strong><span class="codeString">build}"</span>/><br>
<<strong>delete dir=<span class="codeString">"${</span></strong><span class="codeString">dist}"</span>/><br>
</<strong>target</strong>><br> <br>
</<strong>project</strong>> </code></blockquote>
</section>
<section>
<h2>Limitations</h2>
<ul>
<li>Peu ergonomique</li>
<li>Faible niveau d'intégration dans les outils</li>
</ul>
</section>
<section>
<h2>Voir</h2>
<ul>
<li>Ant
<ul>
<li><a href="https://jakarta.apache.org/ant/bindownload.cgi">Téléchargement</a></li>
<li>Documentation
<ul>
<li><a href="https://ant.apache.org/manual">Manuel</a></li>
<li><a href="https://nagoya.apache.org/gump/javadoc/ant/build/javadocs/index.html">API</a></li>
</ul>
</li>
</ul>
</li>
<li>Sun Dot Com Builder - <a href="https://dcb.sun.com/practices/profiles/ant.jsp"><em>Ant best pratices</em></a>
</li>
<li>AJUG 2002 Meeting - <a href="https://www.ajug.org/meetings/download/struts.pdf"><em>Whirwind tour with Ant</em></a>
</li>
</ul>
</section>
<!--#include virtual="/footer.html" -->