F-annexe-ANT.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="generator" content="pandoc" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  7. <title>ANT et outils de build</title>
  8. <style type="text/css">
  9. code{white-space: pre-wrap;}
  10. span.smallcaps{font-variant: small-caps;}
  11. span.underline{text-decoration: underline;}
  12. div.column{display: inline-block; vertical-align: top; width: 50%;}
  13. </style>
  14. <style type="text/css">
  15. a.sourceLine { display: inline-block; line-height: 1.25; }
  16. a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
  17. a.sourceLine:empty { height: 1.2em; position: absolute; }
  18. .sourceCode { overflow: visible; }
  19. code.sourceCode { white-space: pre; position: relative; }
  20. div.sourceCode { margin: 1em 0; }
  21. pre.sourceCode { margin: 0; }
  22. @media screen {
  23. div.sourceCode { overflow: auto; }
  24. }
  25. @media print {
  26. code.sourceCode { white-space: pre-wrap; }
  27. a.sourceLine { text-indent: -1em; padding-left: 1em; }
  28. }
  29. pre.numberSource a.sourceLine
  30. { position: relative; }
  31. pre.numberSource a.sourceLine:empty
  32. { position: absolute; }
  33. pre.numberSource a.sourceLine::before
  34. { content: attr(data-line-number);
  35. position: absolute; left: -5em; text-align: right; vertical-align: baseline;
  36. border: none; pointer-events: all;
  37. -webkit-touch-callout: none; -webkit-user-select: none;
  38. -khtml-user-select: none; -moz-user-select: none;
  39. -ms-user-select: none; user-select: none;
  40. padding: 0 4px; width: 4em;
  41. color: #aaaaaa;
  42. }
  43. pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
  44. div.sourceCode
  45. { }
  46. @media screen {
  47. a.sourceLine::before { text-decoration: underline; }
  48. }
  49. code span.al { color: #ff0000; font-weight: bold; } /* Alert */
  50. code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
  51. code span.at { color: #7d9029; } /* Attribute */
  52. code span.bn { color: #40a070; } /* BaseN */
  53. code span.bu { } /* BuiltIn */
  54. code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
  55. code span.ch { color: #4070a0; } /* Char */
  56. code span.cn { color: #880000; } /* Constant */
  57. code span.co { color: #60a0b0; font-style: italic; } /* Comment */
  58. code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
  59. code span.do { color: #ba2121; font-style: italic; } /* Documentation */
  60. code span.dt { color: #902000; } /* DataType */
  61. code span.dv { color: #40a070; } /* DecVal */
  62. code span.er { color: #ff0000; font-weight: bold; } /* Error */
  63. code span.ex { } /* Extension */
  64. code span.fl { color: #40a070; } /* Float */
  65. code span.fu { color: #06287e; } /* Function */
  66. code span.im { } /* Import */
  67. code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
  68. code span.kw { color: #007020; font-weight: bold; } /* Keyword */
  69. code span.op { color: #666666; } /* Operator */
  70. code span.ot { color: #007020; } /* Other */
  71. code span.pp { color: #bc7a00; } /* Preprocessor */
  72. code span.sc { color: #4070a0; } /* SpecialChar */
  73. code span.ss { color: #bb6688; } /* SpecialString */
  74. code span.st { color: #4070a0; } /* String */
  75. code span.va { color: #19177c; } /* Variable */
  76. code span.vs { color: #4070a0; } /* VerbatimString */
  77. code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
  78. </style>
  79. <link rel="stylesheet" href="pandoc.css">
  80. <!--[if lt IE 9]>
  81. <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  82. <![endif]-->
  83. </head>
  84. <body>
  85. <div class="doctitle">ANT et outils de build</div>
  86. <nav id="TOC">
  87. <ul>
  88. <li><a href="#ant">ANT</a><ul>
  89. <li><a href="#introduction">Introduction</a></li>
  90. <li><a href="#installation-de-ant">Installation de ant</a><ul>
  91. <li><a href="#vérification-de-linstallation">Vérification de l’installation</a></li>
  92. </ul></li>
  93. <li><a href="#premiers-pas-avec-ant">Premiers pas avec Ant</a><ul>
  94. <li><a href="#propriétés">Propriétés</a></li>
  95. <li><a href="#fichier-de-propriétés">Fichier de propriétés</a></li>
  96. </ul></li>
  97. </ul></li>
  98. </ul>
  99. </nav>
  100. <h1 id="ant">ANT</h1>
  101. <h2 id="introduction">Introduction</h2>
  102. <p><strong>Ant</strong> est un outil de build qui permet de :</p>
  103. <ul>
  104. <li>Compiler du code</li>
  105. <li>Empaqueter des binaires</li>
  106. <li>Déployer des binaires sur des serveurs</li>
  107. <li>Tester les modifications</li>
  108. </ul>
  109. <p>C’est un outil assez ancien qui a été intégré comme projet Apache en l’an 2000.</p>
  110. <p>Il est basé sur des fichiers de configuration écrits en XML (fichier build.xml).</p>
  111. <h2 id="installation-de-ant">Installation de ant</h2>
  112. <p>L’installation se fait en suivant les instructions données sur la page du <a href="https://ant.apache.org/">projet Ant</a>. Il est disponible à l’installation notamment via le gestionnaires de paquets.</p>
  113. <h3 id="vérification-de-linstallation">Vérification de l’installation</h3>
  114. <p>Pour vérifier la version de Ant présente sur votre système, tapez la commande:</p>
  115. <div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb1-1" data-line-number="1">$ <span class="ex">ant</span> -version</a>
  116. <a class="sourceLine" id="cb1-2" data-line-number="2"><span class="ex">Apache</span> Ant(TM) <span class="ex">version</span> 1.10.2 compiled on February 3 2018</a></code></pre></div>
  117. <h2 id="premiers-pas-avec-ant">Premiers pas avec Ant</h2>
  118. <p>Créez un fichier <code>build.xml</code> qui va nous permettre de tester Ant:</p>
  119. <div class="sourceCode" id="cb2"><pre class="sourceCode xml"><code class="sourceCode xml"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="kw">&lt;?xml</span> version = &quot;1.0&quot;<span class="kw">?&gt;</span></a>
  120. <a class="sourceLine" id="cb2-2" data-line-number="2"><span class="kw">&lt;project</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;Hello World with Ant&quot;</span><span class="ot"> default</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  121. <a class="sourceLine" id="cb2-3" data-line-number="3"> <span class="kw">&lt;target</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  122. <a class="sourceLine" id="cb2-4" data-line-number="4"> <span class="kw">&lt;echo&gt;</span>Hello World - Ant<span class="kw">&lt;/echo&gt;</span></a>
  123. <a class="sourceLine" id="cb2-5" data-line-number="5"> <span class="kw">&lt;/target&gt;</span></a>
  124. <a class="sourceLine" id="cb2-6" data-line-number="6"><span class="kw">&lt;/project&gt;</span></a></code></pre></div>
  125. <p>Lancez maintenant la commande <code>ant</code>:</p>
  126. <div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb3-1" data-line-number="1">$ <span class="ex">ant</span></a>
  127. <a class="sourceLine" id="cb3-2" data-line-number="2"><span class="ex">Buildfile</span>: /path/to/ant/project/build.xml</a>
  128. <a class="sourceLine" id="cb3-3" data-line-number="3"></a>
  129. <a class="sourceLine" id="cb3-4" data-line-number="4"><span class="ex">info</span>:</a>
  130. <a class="sourceLine" id="cb3-5" data-line-number="5"> [<span class="ex">echo</span>] Hello World - Ant</a>
  131. <a class="sourceLine" id="cb3-6" data-line-number="6"></a>
  132. <a class="sourceLine" id="cb3-7" data-line-number="7"><span class="ex">BUILD</span> SUCCESSFUL</a>
  133. <a class="sourceLine" id="cb3-8" data-line-number="8"><span class="ex">Total</span> time: 0 seconds</a></code></pre></div>
  134. <h3 id="propriétés">Propriétés</h3>
  135. <h4 id="définition-dune-propriété">Définition d’une propriété</h4>
  136. <p>Nous allons maintenant définir une propriété (<code>property</code>).</p>
  137. <p>Modifiez maintenant le fichier <code>build.xml</code> comme suit:</p>
  138. <div class="sourceCode" id="cb4"><pre class="sourceCode xml"><code class="sourceCode xml"><a class="sourceLine" id="cb4-1" data-line-number="1"><span class="kw">&lt;?xml</span> version = &quot;1.0&quot;<span class="kw">?&gt;</span></a>
  139. <a class="sourceLine" id="cb4-2" data-line-number="2"><span class="kw">&lt;project</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;Hello World with Ant&quot;</span><span class="ot"> default</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  140. <a class="sourceLine" id="cb4-3" data-line-number="3"> <span class="kw">&lt;property</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;site.name&quot;</span><span class="ot"> value</span> <span class="ot">=</span> <span class="st">&quot;www.example.com&quot;</span><span class="kw">/&gt;</span></a>
  141. <a class="sourceLine" id="cb4-4" data-line-number="4"> <span class="kw">&lt;target</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  142. <a class="sourceLine" id="cb4-5" data-line-number="5"> <span class="kw">&lt;echo&gt;</span>Hello World - Ant site is ${site.name}<span class="kw">&lt;/echo&gt;</span></a>
  143. <a class="sourceLine" id="cb4-6" data-line-number="6"> <span class="kw">&lt;/target&gt;</span></a>
  144. <a class="sourceLine" id="cb4-7" data-line-number="7"><span class="kw">&lt;/project&gt;</span></a></code></pre></div>
  145. <p>L’appel de la commande <code>ant</code> donne:</p>
  146. <pre><code>...
  147. info:
  148. [echo] Hello World - Ant site is www.example.com
  149. ...</code></pre>
  150. <p>Nous venons de définir une propriété nommée <code>site.name</code>.</p>
  151. <h4 id="propriétés-pré-définies">Propriétés pré-définies</h4>
  152. <p>Ajoutez les deux lignes <code>echo</code> dans la cible <code>info</code> comme suit :</p>
  153. <div class="sourceCode" id="cb6"><pre class="sourceCode xml"><code class="sourceCode xml"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="kw">&lt;target</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  154. <a class="sourceLine" id="cb6-2" data-line-number="2"> <span class="kw">&lt;echo&gt;</span>Hello World - Ant site is ${site.name}<span class="kw">&lt;/echo&gt;</span></a>
  155. <a class="sourceLine" id="cb6-3" data-line-number="3"> <span class="kw">&lt;echo&gt;</span>Ant version is ${ant.version}<span class="kw">&lt;/echo&gt;</span></a>
  156. <a class="sourceLine" id="cb6-4" data-line-number="4"> <span class="kw">&lt;echo&gt;</span>Base dir is ${basedir}<span class="kw">&lt;/echo&gt;</span></a>
  157. <a class="sourceLine" id="cb6-5" data-line-number="5"><span class="kw">&lt;/target&gt;</span></a></code></pre></div>
  158. <p>On obtient au lancement de <code>ant</code>:</p>
  159. <pre><code>info:
  160. [echo] Hello World - Ant site is www.example.com /tmp/path/to/ant/project
  161. [echo] Ant version is Apache Ant(TM) version 1.10.2 compiled on February 3 2018
  162. [echo] Base dir is /tmp/path/to/ant/project</code></pre>
  163. <p>Nous venons d’utiliser des propriétés pré-définies. En voici une liste :</p>
  164. <table>
  165. <colgroup>
  166. <col style="width: 29%" />
  167. <col style="width: 70%" />
  168. </colgroup>
  169. <thead>
  170. <tr class="header">
  171. <th>Nom</th>
  172. <th>Définition</th>
  173. </tr>
  174. </thead>
  175. <tbody>
  176. <tr class="odd">
  177. <td>ant.file</td>
  178. <td> Le chemin complet vers le fichier de build</td>
  179. </tr>
  180. <tr class="even">
  181. <td>ant.version</td>
  182. <td>La version de Ant</td>
  183. </tr>
  184. <tr class="odd">
  185. <td>basedir</td>
  186. <td>Répertoire de base du <em>build</em>. Peut être spécifié avec l’attribut <code>basedir</code> de l’élément <code>project</code></td>
  187. </tr>
  188. <tr class="even">
  189. <td>ant.java.version</td>
  190. <td>Version de Java utilisée</td>
  191. </tr>
  192. <tr class="odd">
  193. <td>ant.project.name</td>
  194. <td>Le nom du projet (attribute <code>name</code> de l’élément projet)</td>
  195. </tr>
  196. <tr class="even">
  197. <td>ant.project.default-target</td>
  198. <td>Cible par défaut du projet actuel</td>
  199. </tr>
  200. <tr class="odd">
  201. <td>ant.project.invoked-targets</td>
  202. <td>Cible invoquées (liste séparée par des virgules) du projet</td>
  203. </tr>
  204. <tr class="even">
  205. <td>ant.core.lib</td>
  206. <td>Chemin vers la librairie Ant (fichier JAR)</td>
  207. </tr>
  208. <tr class="odd">
  209. <td>ant.home</td>
  210. <td>Répertoire d’installation de Ant (<code>ANT_HOME</code>)</td>
  211. </tr>
  212. <tr class="even">
  213. <td>ant.library.dir   </td>
  214. <td>Répertoire des librairies Ant. En général: <code>ANT_HOME/lib</code></td>
  215. </tr>
  216. <tr class="odd">
  217. <td>file.separator  </td>
  218. <td>le séparateur des noms de répertoire</td>
  219. </tr>
  220. </tbody>
  221. </table>
  222. <p>Vous pouvez tester ces propriétés avec le fichier suivant:</p>
  223. <div class="sourceCode" id="cb8"><pre class="sourceCode xml"><code class="sourceCode xml"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="kw">&lt;?xml</span> version = &quot;1.0&quot;<span class="kw">?&gt;</span></a>
  224. <a class="sourceLine" id="cb8-2" data-line-number="2"><span class="kw">&lt;project</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;Hello World with Ant&quot;</span><span class="ot"> default</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  225. <a class="sourceLine" id="cb8-3" data-line-number="3"> <span class="kw">&lt;property</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;site.name&quot;</span><span class="ot"> value</span> <span class="ot">=</span> <span class="st">&quot;www.example.com&quot;</span><span class="kw">/&gt;</span></a>
  226. <a class="sourceLine" id="cb8-4" data-line-number="4"> <span class="kw">&lt;target</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  227. <a class="sourceLine" id="cb8-5" data-line-number="5"> <span class="kw">&lt;echo&gt;</span>Hello World - Ant site is ${site.name} ${basedir}<span class="kw">&lt;/echo&gt;</span></a>
  228. <a class="sourceLine" id="cb8-6" data-line-number="6"> <span class="kw">&lt;echo&gt;</span>Ant version is ${ant.version}<span class="kw">&lt;/echo&gt;</span></a>
  229. <a class="sourceLine" id="cb8-7" data-line-number="7"> <span class="kw">&lt;echo&gt;</span>Base dir is ${basedir}<span class="kw">&lt;/echo&gt;</span></a>
  230. <a class="sourceLine" id="cb8-8" data-line-number="8"> <span class="kw">&lt;echo&gt;</span>Java version is ${ant.java.version}<span class="kw">&lt;/echo&gt;</span></a>
  231. <a class="sourceLine" id="cb8-9" data-line-number="9"> <span class="kw">&lt;echo&gt;</span>ant.project.name is ${ant.project.name}<span class="kw">&lt;/echo&gt;</span></a>
  232. <a class="sourceLine" id="cb8-10" data-line-number="10"> <span class="kw">&lt;echo&gt;</span>ant.project.default-target : ${ant.project.default-target}<span class="kw">&lt;/echo&gt;</span></a>
  233. <a class="sourceLine" id="cb8-11" data-line-number="11"> <span class="kw">&lt;echo&gt;</span>ant.project.invoked-targets : ${ant.project.invoked-targets}<span class="kw">&lt;/echo&gt;</span></a>
  234. <a class="sourceLine" id="cb8-12" data-line-number="12"> <span class="kw">&lt;echo&gt;</span>ant.core.lib : ${ant.core.lib}<span class="kw">&lt;/echo&gt;</span></a>
  235. <a class="sourceLine" id="cb8-13" data-line-number="13"> <span class="kw">&lt;echo&gt;</span>ant.home : ${ant.home}<span class="kw">&lt;/echo&gt;</span></a>
  236. <a class="sourceLine" id="cb8-14" data-line-number="14"> <span class="kw">&lt;echo&gt;</span>ant.library.dir : ${ant.library.dir}<span class="kw">&lt;/echo&gt;</span></a>
  237. <a class="sourceLine" id="cb8-15" data-line-number="15"> <span class="kw">&lt;echo&gt;</span>file.separator : ${file.separator}<span class="kw">&lt;/echo&gt;</span></a>
  238. <a class="sourceLine" id="cb8-16" data-line-number="16"> <span class="kw">&lt;/target&gt;</span></a>
  239. <a class="sourceLine" id="cb8-17" data-line-number="17"><span class="kw">&lt;/project&gt;</span></a></code></pre></div>
  240. <h3 id="fichier-de-propriétés">Fichier de propriétés</h3>
  241. <p>Il est possible de définir les propriétés d’un projet (son nom, sa version, etc) directement dans le fichier <code>build.xml</code>.</p>
  242. <p>Cependant, une pratique courante consiste à placer un fichier nommé <code>build.properties</code> à côté du fichier <code>build.xml</code></p>
  243. <p>Créez le fichier <code>build.properties</code> et y placer les éléments suivants:</p>
  244. <pre class="properties"><code>site.name = www.example.com
  245. build.version = 1.2.3</code></pre>
  246. <p>Modifiez le fichier <code>build.xml</code> comme suit:</p>
  247. <div class="sourceCode" id="cb10"><pre class="sourceCode xml"><code class="sourceCode xml"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="kw">&lt;?xml</span> version = &quot;1.0&quot;<span class="kw">?&gt;</span></a>
  248. <a class="sourceLine" id="cb10-2" data-line-number="2"><span class="kw">&lt;project</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;Hello World with Ant&quot;</span><span class="ot"> default</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  249. <a class="sourceLine" id="cb10-3" data-line-number="3"> <span class="kw">&lt;property</span><span class="ot"> file</span> <span class="ot">=</span> <span class="st">&quot;build.properties&quot;</span><span class="kw">/&gt;</span></a>
  250. <a class="sourceLine" id="cb10-4" data-line-number="4"> <span class="kw">&lt;target</span><span class="ot"> name</span> <span class="ot">=</span> <span class="st">&quot;info&quot;</span><span class="kw">&gt;</span></a>
  251. <a class="sourceLine" id="cb10-5" data-line-number="5"> <span class="kw">&lt;echo&gt;</span>Hello World - Ant site is ${site.name}<span class="kw">&lt;/echo&gt;</span></a>
  252. <a class="sourceLine" id="cb10-6" data-line-number="6"> <span class="kw">&lt;echo&gt;</span>Project version is ${build.version}<span class="kw">&lt;/echo&gt;</span></a>
  253. <a class="sourceLine" id="cb10-7" data-line-number="7"> <span class="kw">&lt;/target&gt;</span></a>
  254. <a class="sourceLine" id="cb10-8" data-line-number="8"><span class="kw">&lt;/project&gt;</span></a></code></pre></div>
  255. <p>L’exécution de Ant donne alors:</p>
  256. <div class="sourceCode" id="cb11"><pre class="sourceCode xml"><code class="sourceCode xml"><a class="sourceLine" id="cb11-1" data-line-number="1">iinfo:</a>
  257. <a class="sourceLine" id="cb11-2" data-line-number="2"> [echo] Hello World - Ant site is www.example.com</a>
  258. <a class="sourceLine" id="cb11-3" data-line-number="3"> [echo] Project version is 1.2.3</a>
  259. <a class="sourceLine" id="cb11-4" data-line-number="4"></a>
  260. <a class="sourceLine" id="cb11-5" data-line-number="5">BUILD SUCCESSFUL</a>
  261. <a class="sourceLine" id="cb11-6" data-line-number="6">Total time: 0 seconds</a></code></pre></div>
  262. </body>
  263. </html>