Automatisez vos projets avec Apache Ant

Vous êtes-vous déjà retrouvé dans des tâches ennuyeuses et répétitives en tant que développeur web? Aujourd'hui, je vais vous montrer comment vous pouvez éliminer ces méta-tâches de votre cycle de développement avec un peu d'automatisation. Dans ce didacticiel, vous allez apprendre à effectuer facilement ces tâches répétitives avec Apache Ant..

Tutoriel republié

Toutes les quelques semaines, nous revoyons certains des articles préférés de nos lecteurs tout au long de l'histoire du site. Ce tutoriel a été publié pour la première fois en mars 2011..


Intro: Qu'est-ce que Ant?

Ant facilite énormément la définition d'un ensemble de tâches que vous pouvez ensuite exécuter avec quelques commandes..

Ant est un logiciel initialement conçu pour automatiser les versions de logiciels. Il est fait par Apache (oui, comme sur le serveur Apache), et son but principal est de créer des applications Java. Lorsque vous créez un logiciel (ou, dans notre cas, des sites Web / applications), vous effectuez plusieurs tâches identiques à chaque fois que vous créez, publiez ou déployez votre projet. C'est une perte de votre temps précieux de le faire manuellement. Ant facilite énormément la définition d'un ensemble de tâches que vous pouvez ensuite exécuter avec quelques commandes simples via le terminal..

Prêt? Commençons!


Étape 0: Création de notre projet factice

Avant d'arriver à Ant, nous devons avoir un projet sur lequel travailler. Ici se trouve le index.html fichier que j'utilise:

    Projet factice      

Page de démonstration

Il y a trois fichiers CSS et trois fichiers JavaScript dans ce projet.

  • Eric Meyer Reset
  • Grid.css du Blueprint CSS
  • Une feuille de style personnalisée
  • jQuery
  • La priorité top down operator de Douglas Crockford contient les fichiers tokens.js et parse.js.

Tous ces fichiers ne sont pas compressés. c'est le but de ce tutoriel, après tout.

Comme vous pouvez le constater, cela explique le reste du projet. Si vous téléchargez le projet (lien en haut), vous obtiendrez les fichiers CSS et JavaScript.

Alors, qu'allons-nous faire avec ce projet? Comme vous pouvez le constater, plusieurs fichiers CSS et JavaScript sont liés dans ce projet. Ce que nous ferons est de compiler et de compresser chacun dans son fichier respectif et de tout transférer par FTP sur un serveur. Avant tout, nous allons commencer par installer Ant.


Étape 1: Installation de Ant

Installer Ant peut être une tâche plutôt décourageante. Heureusement, le processus d'installation Windows et Mac est assez similaire. Si vous êtes sous Linux, je vais supposer que vous avez déjà installé Ant, que vous savez comment faire ou que vous pouvez le résoudre sans ma main..

Si vous utilisez un Mac, Ant est probablement déjà installé. Cependant, certaines des tâches les plus avancées (dans notre cas, FTP) ne fonctionneront pas. Donc, nous allons installer la dernière version.

Avant de commencer, je vous indiquerai les instructions complètes proposées par Apache: vous pouvez les obtenir ici. (Malheureusement, c'est tout le manuel de Ant; je ne peux pas faire mieux, comme c'est le cas pour les cadres. Vous verrez le lien «Installer Apache Ant» dans le cadre de gauche.) Ce que je vous dis ci-dessous peut être trouvé. là-bas (et plus encore), mais ma version est un peu plus conviviale pour les développeurs Web.

Tout d'abord, assurons-nous que nous avons les bonnes dépendances Java. Que vous soyez sous Windows ou Mac, vous aurez besoin du kit de développement Java (JDK), version minimum 1.4. Vous pouvez le télécharger ici. Si vous ne savez pas quelle version du JDK vous avez, exécutez la commande version java dans le terminal / ligne de commande. Si je comprends bien, le numéro de version du JDK est le même que celui de la version de Java..

Maintenant, téléchargeons la dernière version de Ant. Vous pouvez l'obtenir à partir de la page de téléchargement de la distribution binaire (bien sûr, vous pouvez obtenir le source et le compiler vous-même, si c'est comme cela que vous obtenez). Vous trouverez les liens à mi-chemin de la page:

Une fois que vous l'avez téléchargé et décompressé, nous devons l'installer. Voici ce que vous obtiendrez:

La première partie de l'installation diffère selon votre plate-forme. Commençons par les étapes de Windows:

Bits d'installation spécifiques à Windows

Tout d’abord, vous devrez choisir le dossier dans lequel vous souhaitez installer Ant. J'y suis allé avec C: \ ant, Mais c'est à toi de voir. Créez ce dossier et déplacez le poubelle, lib, et etc dossiers de votre dossier de téléchargement vers ce dossier. Vous aurez aussi envie de bouger fetch.xml et get-m2.xml.

Une fois que vous avez fait cela, vous devrez configurer certaines variables environnementales. Si vous ne savez pas comment faire cela, vous pouvez trouver des instructions ici (Définissez ces variables système, bien que, honnêtement, cela ne devrait pas avoir d'importance). Voici ce que vous aurez besoin de configurer:

  • Vous aurez besoin d'une variable appelée ANT_HOME; Cela devrait indiquer le dossier dans lequel vous avez déplacé les composants Ant. Exemple: C: \ ant.
  • Vous aurez besoin d'une variable appelée JAVA_HOME; cela existe peut-être déjà, mais si ce n'est pas le cas, cela devrait pointer vers le dossier contenant votre installation Java. Le mien est C: \ Program Files \ Java \ jdk1.6.0_18.
  • Vous aurez besoin de modifier votre Chemin variable. Il s'agit d'une liste de dossiers dans lesquels la ligne de commande effectue une recherche pour rechercher les commandes à exécuter. NE PAS écraser ceci de manière compétitive; il suffit d'ajouter ;% ANT_HOME% \ bin à la fin de celui-ci. Ne manquez pas ce point-virgule; c'est ce qui sépare les chemins de la liste. Vous pourriez peut-être deviner que le % ANT_HOME% références bit la variable que nous avons faite plus tôt.

Maintenant, Ant est installé sur Windows! Il y a cependant une autre étape importante. alors sautez pver le morceau Mac et continuez à suivre.

Bits d'installation spécifiques à Mac

Ant est déjà installé sur votre Mac; vous pouvez le voir en lançant la commande quelle fourmi sur le terminal. Cela produira quelque chose le long des lignes de / usr / bin / ant, en tant que chemin d'accès à l'exécutable Ant que vous utilisez. Cependant, si vous allez dans ce dossier, vous constaterez qu'il ne s'agit que d'un lien symbolique vers les véritables éléments..

Comme vous pouvez le constater, pour moi, cela est lié à /usr/share/java/ant-1.8.1/bin/ant. Maintenant, vous pouvez l'utiliser, mais lorsque j'ai essayé, je n'ai pas pu utiliser le composant FTP. Plutôt que d’installer Ant ailleurs ailleurs et de jouer avec le lien symbolique, j’ai choisi de faire ceci: déplacer ce qui était dans la usr / share / java / ant-1.8.1 dossier dans un sous-dossier appelé _vieux et déplacez le nouveau dans po Vous devrez déplacer le poubelle, lib, et etc dossiers, plus le fetch.xml et get-m2.xml des dossiers. Maintenant, ce lien symbolique désignera la version mise à jour de ant. Si vous courez fourmi -version dans le terminal, vous devriez voir que vous avez la version 1.8.2 (ou la version la plus récente au moment où vous lisez ceci).

Retour à toutes les instructions du système d'exploitation

Il reste encore une étape pour terminer l’installation. Il existe plusieurs composants facultatifs qui ne viennent pas avec Ant, mais dont nous aurons besoin pour notre projet et que vous voudrez peut-être utiliser plus tard. Allons les chercher maintenant.

Vous commencerez par ouvrir une ligne de commande ou un terminal, puis le répertoire dans lequel vous venez d'installer Ant. Plus important encore, c'est le répertoire dans lequel vous mettez le fetch.xml file in. Maintenant, lancez cette commande:

ant -f fetch.xml -Ddest = system

Cela téléchargera et installera quelques composants optionnels; ce n'est pas une de ces commandes: cela pourrait prendre quelques minutes.

Maintenant, Ant est installé et prêt à fonctionner. Mettons-nous au travail.


Étape 2: Création du build.xml Fichier

Ant utilise un fichier XML pour stocker les tâches du projet en cours..

Ant utilise un fichier XML pour stocker les tâches du projet en cours. lorsque vous êtes dans le répertoire de ce projet sur la ligne de commande, vous pourrez exécuter la commande ant TASK_NAME_HERE, et il trouvera la tâche appropriée dans le fichier XML et l'exécutera.

Si vous n'êtes pas familier avec XML, ne vous inquiétez pas. XML signifie eXtensible Markup Language, et il ressemble beaucoup à HTML. Il utilise des balises et des attributs pour définir les données. En fait, cela ressemble plus au XHTML (RIP), en ce que les règles sont strictes: toutes les balises et tous les attributs doivent être en minuscules, les valeurs sont citées, un doctype est requis, etc. Ne vous inquiétez pas, vous comprendrez il.

Le fichier XML que Ant recherche par défaut doit être nommé build.xml; vous voudrez le mettre dans votre dossier de projet.

Alors, qu'est-ce qui se passe exactement dans le fichier XML? Voici un début:

  

On dirait du HTML, hein? La première ligne est un doctype XML. Ensuite, nous avons le nœud racine, qui est un projet. J'ai ajouté deux attributs: un prénom, qui explique simplement ce que notre liste de tâches fera; et un défaut, qui définit la tâche par défaut à exécuter.

Vous voyez, voici comment fonctionne l’idée de tâche par défaut. Disons que nous créons une tâche appelée appel maman. Nous pourrions exécuter cela depuis le terminal en faisant ceci:

ant call_mom

Si vous trouvez que la plupart du temps, vous exécutez Ant sur un projet et que vous appelez la même tâche, vous voudrez en faire la valeur par défaut. Dans notre cas, nous avons défini initialiser comme tâche par défaut, celle qui sera exécutée si nous ne disons rien à ant.

ant initialise ant

Ce sont les mêmes.

Maintenant que nous avons notre build.xml fichier, créons notre première tâche.


Étape 3: Écrire notre première tâche

Les tâches sont appelées des cibles dans le build.xml fichier. Regarde ça:

  salut maman!  

Branchez ceci dans votre build.xml déposer et exécuter ant call_mom sur la console. Vous devriez sortir un résultat qui ressemble à ceci:

Buildfile: /path/to/your/build.xml call_mom: [echo] Bonjour maman! BUILD SUCCESSFUL Temps total: 0 secondes

Dans sa sortie, Ant aura une entrée pour toutes les tâches exécutées. Ensuite, toute sortie de ces tâches sera affichée, onglet sous le nom de la tâche appropriée. Comme vous pouvez le voir, nous avons appelé le écho tâche, qui imprime tout ce que nous mettons à l'intérieur.

Mais comment savais-je que l'écho était une tâche? Eh bien, vous pouvez obtenir une liste des tâches intégrées ici dans la documentation. C'est un bon moment pour souligner que plusieurs tâches peuvent être appelées de différentes manières. Par exemple, nous aurions aussi pu faire: . Ce que je vous montre n'est pas le seul moyen de faire les choses.

Maintenant que vous commencez à vous familiariser avec les idées de Ant, parlons des propriétés.


Étape 4: Création d'un fichier de propriétés

Ant a des propriétés qui ressemblent beaucoup à des variables dans un langage de programmation.

Si vous utilisez Ant plus, vous pourriez constater que vous avez un passe-partout build.xml fichier que vous modifiez légèrement. L’un de ces réglages peut être un nom de fichier / dossier. Ant a des propriétés qui ressemblent beaucoup à des variables dans un langage de programmation. Vous pouvez les créer de cette façon (cela se fait dans une tâche).

  feuilles de style

Vous pouvez également déplacer toutes ces propriétés dans un fichier séparé et importer le fichier. C'est ce que nous ferons ici. Cela nous amène à créer notre première (vraie) tâche:

  Propriétés importées 

Nous avons appelé notre tâche get_properties. Il s’agit de deux actions: premièrement, nous utilisons le propriété tâche pour importer le fichier (nous pouvons le faire avec le fichier attribut). Ensuite, nous faisons écho à un message disant que c'était réussi. C'est si simple.

Bien sûr, nous devrons créer le ant.properties fichier. C'est super simple. voici celui que nous utiliserons aujourd'hui:

css_dir = css js_dir = js assets_dir = assets

Vous pensez peut-être que cela rend les choses plus difficiles, car les noms de nos variables sont plus longs que les valeurs elles-mêmes. C’est vrai, mais cela nous donne une certaine souplesse dans l’utilisation de nos build.xml fichier, le rend plus réutilisable et plus partageable.


Étape 5: créer quelques tâches supplémentaires

Bon, passons maintenant au sérieux. Nous avons évidemment pas mal de tâches à créer avant d’avoir une utile build.xml fichier.

Voici une liste des tâches que nous devons créer:

  • Un pour compiler les fichiers CSS.
  • Un pour compresser le fichier CSS.
  • Un pour compiler les fichiers JavaScript.
  • Un pour compresser le fichier JavaScript.
  • Un pour tout télécharger sur notre serveur.
  • Un pour initialiser les autres tâches.
  • Un pour nettoyer ce que font les autres.

Nous allons utiliser différentes tactiques pour faire tout cela, afin de donner un bon aperçu du fonctionnement de Ant..

Compiler le CSS et JavaScript

Commençons par les tâches de compilation; ceux-ci prennent un ensemble de fichiers et les concaténent dans un seul fichier. Ant a une tâche intégrée nommée concat ça fait ça.

        

J'ai nommé cette tâche concat_css. À l'intérieur, nous ne faisons que concat tâche. Comme vous pouvez le constater, le fichier dans lequel ils seront concaténés (destfile, ou fichier de destination) sera dans assets / style.css. Vous remarquerez que je l'utilise assets_dir properties, qui substituera la valeur correcte dans. Vous devez envelopper les utilisations des propriétés dans la notation dollar-sign-and-accolades.

À l'intérieur de concat tâche, nous définissons un liste de fichiers Ce n’est qu’un des moyens par lesquels nous pouvons récupérer un tas de fichiers. Je l'utilise ici car cela me permet de définir l'ordre dans lequel ces fichiers doivent être concaténés. Je lui donne un identifiant qui nous donne accès à l'ensemble de fichiers de la même manière que nous utilisons un paramètre (bien que ce ne soit pas le cas). Il a aussi l'attribut dir, qui indique à la tâche dans quel dossier trouver les fichiers. Ensuite, à l’intérieur, définissez simplement le fichier approprié. fichier nœuds, avec leurs prénom attribut contenant le nom de fichier.

Voilà votre première vraie tâche! Espérons que cela a du sens. Pendant que nous y sommes, le JavaScript n'est pas trop différent:

        

Compresser le CSS et JavaScript

La compression devient un peu plus délicate, car elle n'est pas intégrée à Ant. Cependant, Ant prend en charge les tâches extérieures via des fichiers java .jar. C’est extrêmement pratique pour nous, car YUI Compressor est disponible au format .jar (c’est la seule manière dont il est disponible). Vous pouvez le télécharger sur la page de téléchargement de la bibliothèque YUI. Vous voudrez l'enregistrer dans un emplacement intelligent, et peut-être le renommer. Je l'ai sauvegardé MY_USER_FOLDER / bin / yui.jar. Faites ce qui vous plait.

Maintenant, YUI Compressor va compresser JavaScript et CSS. Ce que nous pouvons faire ici est de créer un compresse tâche, puis appelez-la à partir de deux tâches plus spécifiques. Nous pouvons le faire car Ant est capable d'appeler d'autres tâches et de transmettre des paramètres. Voyons comment cela fonctionne:

      $ fichier 

Nous utilisons le Java commande ici. Cela ressemble beaucoup à l’exécution du fichier jar à partir de la ligne de commande. le pot attribut pointe vers le fichier jar. Si la fourchette Si l'attribut est true, le fichier jar sera exécuté sur une machine virtuelle Java distincte de celle sur laquelle Ant est en cours d'exécution. Puis, à l'intérieur du Java noeud, nous définissons les arguments. Sur la ligne de commande, nous passons input.file -o output.file. Donc, nous faisons la même chose ici.

Mais, où est le fichier propriété venant de? D'ici:

    

Ceci est notre tâche de compression CSS. Tout d'abord, notez que le cible Le noeud a un deuxième attribut: dépend. Vous pouvez probablement deviner que cela signifie que le compress_css les tâches dépendent de la concat_css tâche, donc il doit être exécuté en premier. De cette façon, nous pouvons appeler compress_css et il appellera automatiquement concat_css premier.

Maintenant, que se passe-t-il à l'intérieur? Nous exécutons un antcall tâche, qui appelle simplement une autre tâche au sein de notre build.xml file-dans ce cas, c'est notre compresse tâche. À l'intérieur de cela, nous pouvons créer autant de paramètres que nécessaire, chacun ayant un nom et une valeur. Oui, cela ressemble beaucoup à appeler une fonction. C'est le fichier paramètre que nous utilisons dans notre compresse tâche.

Et voici la version JavaScript:

    

N'oubliez pas que celui-ci dépend de concat_js.

Faire rouler la balle

Retour au sommet sur notre racine projet noeud-nous définissons le défaut tâche comme initialiser. Nous n'avons pas encore créé cette tâche, alors faisons-le maintenant.

    Terminé! 

Cette tâche dépend de deux autres tâches (dont l'une n'a pas encore été créée). nous utilisons simplement une liste séparée par des virgules pour nécessiter plusieurs tâches.

À l'intérieur, la première tâche consiste à créer notre répertoire d'actifs, avec le mkdir tâche (comme sur la ligne de commande). Ensuite, nous faisons deux antcalls, un pour compresser le CSS et un pour compresser le JavaScript. Rappelez-vous que ces deux tâches dépendent de leurs fonctions de concaténation respectives, elles seront donc appelées. Enfin, nous allons écho un message informant l'utilisateur que nous avons terminé.

Nettoyer

Que dire de cela nettoyer tâche qui initialiser dépend de? C'est assez simple:

  

Il supprime simplement le répertoire des actifs. Ce n'est pas tout à fait nécessaire, mais vous pourriez le trouver utile.

Télécharger le projet

Créons une tâche de plus; nous voulons télécharger notre projet sur un serveur. Grace à ftp commande, c'est un jeu d'enfant.

       

Nous appelons cette tâche télécharger des fichiers, et cela dépend de initialiser. Nous utilisons la tâche FTP ici. Comme vous pouvez le constater, toutes les informations importantes sont stockées dans les attributs. Si vous avez déjà travaillé avec des clients FTP, toutes ces options devraient vous être familières..

  • À l'intérieur de ftp noeud, nous avons créé une collection de fichiers que nous voulons télécharger. Dans ce cas, nous utilisons un ensemble de fichiers élément.
  • Nous avons un dir attribuer sur le fils noeud qui définit le répertoire racine de ce que nous voulons collecter.
  • Ensuite, à l'intérieur, nous utilisons le comprendre noeud pour obtenir les fichiers spécifiques: nous passons simplement comme attribut name le (s) fichier (s) que nous voulons obtenir. Dans notre exemple, nous obtenons tout le répertoire assets et son contenu, ainsi que le fichier index.html.

Une fois que vous avez renseigné les informations de votre serveur dans cette tâche, il devrait télécharger ces fichiers pour vous.!

Remarquez comment nous avons organisé ces tâches. Si nous courons fourmi sur la ligne de commande, nous concaténons et compressons le CSS et le JavaScript, mais nous ne le téléchargerons pas; ce n'est pas le défaut. Si nous voulons le télécharger, nous pouvons exécuter ant upload_files; puisque cela dépend de initialiser, on n'est pas obligé d'appeler initialiser premier. Bien sûr, nous pouvons appeler n'importe quelle tâche individuelle de notre choix (par exemple: ant compress_js).


Conclusion: envelopper

Avant de terminer, il y a quelques petites choses que je voudrais mentionner:

  • Notez que je n'ai pas utilisé le dépend tâche de chaîner les tâches ensemble. Vous pouvez le faire, mais j'ai choisi de garder cela pour les tâches dépendantes réelles, et créer le initialiser tâche d'appeler les autres. Cela semble juste plus correct sémantiquement.
  • Ce que je vous ai montré n'est qu'un petit fragment de ce dont Ant est capable. Si vous souhaitez en savoir plus, commencez par consulter la vue d'ensemble des tâches. Cela vous montrera toutes les tâches intégrées. Vous réaliserez également qu’il existe de nombreuses façons de faire la même chose (comme je vous l’ai montré avec écho tâche). Les modèles que j'ai utilisés ne sont en aucun cas la «bonne manière». En outre, le Wiki Ant est une excellente ressource..
  • Cela pourrait être bien si nous pouvions avoir une tâche qui analysera le code HTML, trouvera les feuilles de style et les scripts et les placera dans le bon ordre. Malheureusement, puisque Ant n’a pas été écrit pour les développeurs Web, ce n’est pas intégré. Nous devons créer un antlib (une extension), écrit en Java. Pour le moment, nous devrons coder en dur des listes de feuilles de style et de scripts.

Et c'est un wrap! J'espère que vous avez appris de nouvelles techniques qui vous feront gagner du temps dans le futur. Si vous avez des questions, n'hésitez pas à les poster ci-dessous! Merci beaucoup pour la lecture!