Automatisez votre processus de construction à l'aide de Java et Ant

Un processus défini est l'un des outils les plus nécessaires mais souvent les moins utilisés dans le développement de logiciels. C'est par nature une tâche générale qui accompagne un effort de développement. Un processus de génération défini garantit que le logiciel de votre projet de développement est construit exactement de la même manière chaque fois qu'une génération est exécutée. Au fur et à mesure que le processus de construction devient plus complexe - par exemple, avec des constructions EJB ou des tâches supplémentaires - il devient plus nécessaire de parvenir à une telle standardisation. Vous devez établir, documenter et automatiser autant que possible la série exacte d'étapes.

Pourquoi ai-je besoin d'un processus de construction défini?

Un processus de construction défini est une partie essentielle de tout cycle de développement car il permet de combler le fossé entre les environnements de développement, d'intégration, de test et de production. Un processus de construction à lui seul accélérera la migration des logiciels d'un environnement à un autre. Il supprime également de nombreux problèmes liés à la compilation, au chemin de classe ou aux propriétés qui coûtent du temps et de l'argent à de nombreux projets.

Qu'est-ce que Ant?

Ant est un outil de script indépendant de la plate-forme qui vous permet de construire vos scripts de construction de la même manière que l'outil «make» en C ou C ++. Vous pouvez utiliser un grand nombre de tâches intégrées dans Ant sans aucune personnalisation. Certaines des tâches les plus importantes sont présentées dans le tableau suivant mais expliquées plus en détail dans l'exemple qui suit.

Voici quelques commandes utiles intégrées à la distribution Ant.

Commander La description
Fourmi Utilisé pour exécuter un autre processus fourmi à partir du processus actuel.
Copydir Utilisé pour copier un répertoire entier.
Copier un fichier Utilisé pour copier un seul fichier.
CV Gère les packages / modules récupérés à partir d'un référentiel CVS.
Effacer Supprime un seul fichier ou tous les fichiers d'un répertoire spécifié et de ses sous-répertoires.
Deltree Supprime un répertoire avec tous ses fichiers et sous-répertoires.
Exec Exécute une commande système. Lorsque l'attribut os est spécifié, la commande n'est exécutée que lorsque Ant est exécuté sur l'un des systèmes d'exploitation spécifiés.
Avoir Obtient un fichier à partir d'une URL.
Pot Jars un ensemble de fichiers.
Java Exécute une classe Java dans la machine virtuelle (Ant) en cours d'exécution ou forks une autre machine virtuelle si spécifié.
Javac Compile une arborescence source dans la machine virtuelle (Ant) en cours d'exécution.
Javadoc / Javadoc2 Génère une documentation de code à l'aide de l'outil javadoc.
Mkdir Crée un répertoire.
Propriété Définit une propriété (par nom et valeur) ou un ensemble de propriétés (à partir d'un fichier ou d'une ressource) dans le projet.
Rmic Exécute le compilateur rmic pour une certaine classe.
Tstamp Définit les propriétés DSTAMP, TSTAMP et TODAY dans le projet actuel.
Style Traite un ensemble de documents via XSLT.

Alors que d'autres outils sont disponibles pour faire des versions de logiciels, Ant est facile à utiliser et peut être maîtrisé en quelques minutes. De plus, Ant vous permet de créer des fonctionnalités étendues en étendant certaines de ses classes. Je montrerai cette extension dans un exemple suivant.

De quoi ai-je besoin pour utiliser Ant?

Vous devez installer trois composants sur votre ordinateur pour exécuter Ant: JDK, analyseur XML et Ant (voir Ressources pour les liens).

Dans de nombreux cas, l'analyseur XML fait partie des fichiers lib distribués avec le programme d'exécution de servlet ou le serveur Web. Sinon, l'analyseur XML gratuit de java.sun.com est suffisant.

L'installation d'Ant consiste à télécharger les fichiers, à ajouter les bibliothèques de classes au chemin de classe et à ajouter les binaires Ant au chemin.

Exemple de scénario

Cet exemple de scénario devrait vous aider à montrer la valeur de Ant et à vous donner un aperçu de ses avantages et de la façon dont vous pouvez l'utiliser.

Étant donné qu'une grande partie du développement Java actuel se concentre sur Java côté serveur, j'ai choisi une application côté serveur pour l'exemple. Les développeurs travaillant sur des applications Java côté serveur sont généralement intéressés par la compilation de servlets, le déploiement de fichiers JSP et le déploiement de fichiers HTML, de fichiers de configuration ou d'images.

Un schéma commun pour faire cette construction impliquerait le développement de petits scripts dans des langages spécifiques à la plate-forme basés sur le système d'exploitation du serveur. Par exemple, un développeur travaillant sur une machine NT peut créer un fichier de commandes qui exécute les tâches de compilation, puis exécute le déploiement. Cependant, si l'environnement de production avait Unix ou Linux, le développeur devrait réécrire le script, en s'assurant que les scripts étaient synchronisés.

OK, montre-moi comment ça marche

J'espère donc vous avoir convaincu de la nécessité d'utiliser Ant et montré à quel point il est simple à installer. Je vais maintenant vous montrer à quel point Ant est simple à utiliser en parcourant un exemple qui effectue une compilation et un déploiement simples.

Processus de construction simple avec Ant (simple.xml)


  

Il y a beaucoup à expliquer dans l'exemple ci-dessus. Tout d'abord, vous devez comprendre la structure du fichier simple.xml. Il s'agit d'un fichier XML bien formaté contenant une entité de projet composée de plusieurs entités cibles.

La première ligne contient des informations sur le projet global à construire.


  

Les éléments les plus importants de la ligne de projet sont le defaultet le basedir.

L' defaultattribut fait référence à la cible par défaut à exécuter. Étant donné qu'Ant est un outil de création de ligne de commande, il est possible d'exécuter uniquement un sous-ensemble des étapes cibles dans le fichier Ant. Par exemple, je pourrais exécuter la commande suivante:

% ant -buildfile simple.xml init 

Cela exécutera la antcommande et parcourra le fichier simple.xml jusqu'à ce que la initcible soit atteinte. Ainsi, dans cet exemple, la valeur par défaut est deploy. Le processus Ant appelé dans la ligne suivante s'exécutera dans le simple.xmlfichier jusqu'à ce que la deploycommande soit atteinte:

% ant -buildfile simple.xml 

L' basedirattribut est assez explicite car il s'agit du répertoire de base à partir duquel les références relatives contenues dans le fichier de construction sont extraites. Chaque projet ne peut avoir qu'un seul basedirattribut. Vous pouvez donc choisir d'inclure l'emplacement du répertoire complet ou de diviser le fichier de projet volumineux en fichiers de projet plus petits avec des basedirattributs différents .

La ligne d'intérêt suivante est la ligne cible. Deux versions différentes sont présentées ici:


  

L' targetélément contient quatre attributs: name, if, unlesset depends. Ant requiert l' nameattribut, mais les trois autres attributs sont facultatifs.

À l'aide de depends, vous pouvez empiler les tâches Ant afin qu'une tâche dépendante ne soit pas lancée tant que la tâche dont elle dépend n'est pas terminée. Dans l'exemple ci-dessus, la tâche de nettoyage ne démarre pas tant que la inittâche n'est pas terminée. L' dependsattribut peut également contenir une liste de valeurs séparées par des virgules indiquant plusieurs tâches dont dépend la tâche en discussion.

Les commandes ifet unlessvous permettent de spécifier les commandes à exécuter si une certaine propriété est définie ou à moins que cette propriété ne soit définie. Le ifs'exécutera lorsque la valeur de propriété est définie et le unlesss'exécutera si la valeur n'est pas définie. Vous pouvez utiliser la availablecommande pour définir ces propriétés comme indiqué dans l'exemple suivant, ou vous pouvez les définir via la ligne de commande.

La initcible de l'exemple simple contient quatre lignes de propertycommandes comme indiqué ici:


  

Ces propertylignes vous permettent de spécifier les répertoires ou fichiers couramment utilisés. Une propriété est une simple paire nom-valeur qui vous permet de faire référence au répertoire ou au fichier comme une entité logique plutôt que physique.

Si vous voulez faire référence à la sourceDirvariable plus tard dans le fichier Ant, vous pouvez simplement utiliser la syntaxe suivante pour alerte Ant pour obtenir la valeur de cette balise: ${sourceDir}.

Deux autres commandes présentes dans le fichier de construction ci-dessus sont:


  

Ces commandes sont utilisées pour s'assurer qu'il n'y a pas de fichiers superflus dans le répertoire outputDir(ou classeslorsqu'il est déréférencé comme mentionné ci-dessus). La première commande supprime l'arborescence entière contenue sous le outputDir. La deuxième commande crée à nouveau le répertoire.

La dernière ligne d'intérêt majeur pour le développeur est la ligne de compilation suivante:


  

La javaccommande nécessite un répertoire source (l'emplacement d'entrée des fichiers .java) et un répertoire de destination (l'emplacement de sortie du fichier .classes). Il est important de noter que tous les répertoires doivent exister avant l'exécution de la antcommande ou être créés à l'aide de la mkdircommande. Ant ne crée pas de répertoires en fonction de l'intuition, vous devez donc créer le outputDir, en utilisant la mkdircommande avant l'étape de compilation ci-dessus.

Une fois la compiletâche terminée, la deploytâche exécutera l'opération de copie pour déplacer tous les fichiers JSP du répertoire source vers un répertoire de déploiement. En utilisant la copydircommande, vous copiez l'intégralité du répertoire JSP d'un emplacement à un autre. J'ai utilisé la copyfilecommande pour copier un seul fichier de propriétés dans le cadre de la construction.

Bien qu'il ait fallu plusieurs lignes pour expliquer l'exemple, il devrait être évident que Ant est un outil facile à utiliser. En utilisant ce fichier de construction comme point de départ, vous devriez être capable d'incorporer Ant dans votre effort de développement. Les antcommandes présentées dans l'exemple ci-dessus ont des fonctionnalités supplémentaires, dont certaines seront décrites dans cet article, le reste vous est laissé avec des références à la documentation.

Tâches importantes

Il vous appartient de lire les tâches intégrées incluses dans la distribution Ant. Consultez le guide de l'utilisateur dans Ressources pour plus d'informations sur chaque commande. J'ai choisi deux commandes couramment utilisées comme exemples d'options supplémentaires disponibles pour le gestionnaire de construction sans aucune personnalisation.

Code de compilation (y compris les EJB)

Dans l'exemple simple décrit précédemment, vous avez vu une forme simple de la javaccommande. Maintenant, si vous l'examinez plus en détail, vous voyez que vous pouvez spécifier les indicateurs de compilation tels que la dépréciation, le débogage ou l'optimisation ainsi que les fichiers qui seront ou ne seront pas inclus dans la compilation.


  

Vous pouvez utiliser les include/excludeentités à l'intérieur de la javactâche pour inclure / exclure des fichiers correspondant au modèle de l' nameattribut de la compilation. À partir de l'exemple ci-dessus, vous souhaitez inclure les fichiers contenus dans n'importe quel répertoire se terminant par .java mais, en même temps, vous souhaitez exclure les fichiers nommés Script.java à moins qu'une propriété bsf.presentsoit définie sur true.

Vous définissez la bsf.presentpropriété à l'aide de la tâche suivante qui recherche le chemin d'accès aux classes pour le nom de classe spécifié et définit en bsf.presentfonction des résultats de la recherche:


  

La javaccommande n'inclura pas les fichiers appelés version.txt de la compilation basée sur la commande d'exclusion ci-dessus.

Générer javadoc

Une autre tâche que Ant peut aider à automatiser est la génération de javadoc. Vous pouvez utiliser la commande suivante pour générer le javadoc:


  

Les packages spécifient les packages globaux que le javadoc inclura. L' sourcepathattribut pointe vers l'emplacement des fichiers source. La javadoccommande fournit également des attributs vous permettant de spécifier le titre de la fenêtre et du document. Vous pouvez également inclure un avis de copyright au bas de chaque page javadoc, en utilisant l' bottomattribut.

Ant peut-il faire XYZ?

À ce stade, vous avez vu certaines des tâches possibles dans votre processus de construction que Ant peut automatiser. Ces tâches sont incluses directement dans Ant. Vous souhaiterez peut-être personnaliser Ant pour vous aider à effectuer des tâches plus difficiles telles que la création d'EJB et la gestion de la configuration à distance. Certains d'entre vous voudront peut-être augmenter les capacités de rapport d'Ant ou créer une interface utilisateur capable d'exécuter le processus Ant.

La réponse simple à la question "Can Ant do XYZ?" est "Oui, mais vous devrez peut-être le personnaliser."

Extension de fourmi

Deux extensions Ant sont intéressantes à discuter à ce stade. Il s'agit de rapports accrus et de la possibilité de distribuer du code à distance à l'aide d'Ant.

Améliorations des rapports