Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Apache Maven
  3. Définition et cycle de vie d'un projet
Extrait - Apache Maven Maîtrisez l'infrastructure d'un projet Java EE (2e édition)
Extraits du livre
Apache Maven Maîtrisez l'infrastructure d'un projet Java EE (2e édition)
1 avis
Revenir à la page d'achat du livre

Définition et cycle de vie d'un projet

Qu’est-ce qu’un projet Apache Maven ?

1. Description d’un projet Apache Maven

Un projet Apache Maven est avant tout composé d’un descripteur du projet : le fichier POM au format XML.

Selon le type de projet Java, ce descripteur est agrémenté d’autres fichiers. Dans la majorité des cas, on retrouve des fichiers de classes Java pour le code source et les tests, des fichiers ressources (fichiers de configuration, de propriétés...), des fichiers CSS et JavaScript pour un projet web, etc.

Enfin, l’objectif du projet est de produire un fichier ou une archive en sortie qui sera exploitable en tant que simple bibliothèque logicielle voire directement par un serveur d’application (Tomcat, JBoss, Glassfish...).

Maven a pris en considération tous ces aspects, qui composent les projets Java, afin de définir des conventions à respecter pour chaque type de projet Maven, à savoir :

  • Une arborescence de dossiers et fichiers bien définie.

  • Un projet doit produire un seul artefact en sortie.

  • L’identité du projet est normalisée.

Un des atouts majeurs de Maven est d’avoir imposé des conventions de base sur les projets Java là où auparavant chaque équipe structurait son projet à sa façon. Ainsi, un développeur qui se retrouve sur un nouveau projet où Apache Maven est utilisé est rapidement opérationnel pour s’immiscer dans le code et construire un projet.

Malgré tout, ce cadre imposé par Apache Maven est quelquefois perçu comme un inconvénient sur des projets spécifiques qui ne peuvent pas se plier à toutes ces recommandations. Il est donc théoriquement possible de surcharger ces conventions pour les adapter aux besoins d’un projet. Dans la pratique, il est déconseillé de le faire, au risque d’être confronté à des erreurs directement liées à la non-prise en compte de cette configuration notamment lors de l’utilisation de plugins exotiques ou non gérés par l’ASF.

a. Structure d’un projet simple

La structure d’un projet Apache Maven de base est définie comme suit :

  • ${project.basedir}/src/main/java pour les fichiers du code source Java.

  • ${project.basedir}/src/main/resources pour les ressources...

Le cycle de vie selon Apache Maven

1. Qu’est-ce que le cycle de vie d’un projet ?

Tous les projets de développement se basent généralement sur une méthode similaire de travail qui consiste dans un premier temps à préparer le projet puis à compiler les sources afin de les tester et, lorsque les tests sont réussis, à créer une archive de cet ensemble pour enfin l’installer dans l’environnement propice à son exploitation. La documentation associée au projet est réalisée d’abord en amont de ces phases puis en parallèle, pour être générée à la fin du projet.

Apache Maven liste toutes ces étapes nécessaires à la réussite d’un projet et les définit comme les phases du projet. Chaque phase peut réaliser des actions qui sont identifiées comme des cibles (goals). La succession de phases exécutant chacune un ou plusieurs goals est définie comme un cycle de vie du projet.

images/02ep04.png

Apache Maven a identifié trois thèmes principaux, dans l’existence d’un projet, associant à chacun d’eux un cycle de vie spécifique :

  • Le cycle de vie pour le nettoyage du projet (clean lifecycle).

  • Le cycle de vie par défaut (default lifecycle).

  • Le cycle de vie pour le site du projet (site lifecycle).

Les deux premiers cycles cités sont expliqués ci-après, le cycle de vie pour le site du projet est, quant à lui, détaillé dans la partie consacrée à la génération d’un site web pour la documentation du projet, du chapitre Rapports Maven et mesure de la qualité.

2. Le cycle de vie pour le nettoyage du projet

Lorsqu’un projet a été construit une première fois, des fichiers ont été générés (compilés pour les sources Java ou filtrés pour les ressources) dans les dossiers de travail utilisés pour la création de l’archive finale.

Pour la construction suivante, il est possible que ces fichiers ne soient plus à jour et qu’ils nuisent à la bonne réalisation du projet. Pour pallier cette éventualité, Apache Maven a créé le cycle de vie pour le nettoyage du projet.

Il permet de s’assurer d’avoir...

Le mode commande de Maven

1. Comment ça marche ?

Depuis le début de ce livre, un certain nombre de commandes Apache Maven ont été exécutées. Elles n’ont pas, jusqu’à présent, été expliquées au niveau de leurs syntaxes mais simplement pour les actions qu’elles permettent de réaliser au sein d’un projet.

Pour mieux comprendre ce qui se passe lorsqu’une commande Apache Maven est exécutée et faire le rapprochement avec les options disponibles et la configuration mise en place dans le chapitre Présentation d’Apache Maven, il est intéressant de comparer une commande simple lancée par Maven et son équivalent au final en Java.

La commande ci-dessous réalise simplement deux traitements qui sont d’afficher la version de Maven et de supprimer les fichiers liés à une construction précédente du projet.

$ mvn -V clean 

En adaptant le fichier MAVEN_HOME/bin/mvn sous Linux, il est possible de récupérer la commande Java qui est finalement exécutée et de la lancer en lieu et place de mvn -V clean pour vérifier que le résultat est identique.

$ /opt/jdk/bin/java -Xms128m -Xmx256m -classpath  
/opt/maven/boot/plexus-classworlds-2.5.2.jar 
-Dclassworlds.conf=/opt/maven/bin/m2.conf -Dmaven.home=/opt/maven 
org.codehaus.plexus.classworlds.launcher.Launcher -V clean  
 
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47+02:00)  
... 
[INFO] Scanning for projects...  
---------------------------------------------------------------- 
[INFO] Building banque-persistance 1.0.0-SNAPSHOT  
---------------------------------------------------------------- 
... 
[INFO] Deleting /home/elanglet/mvnbook/banque-persistance/target 
... 
[INFO] --------------------------------------------------------- 
[INFO] BUILD SUCCESS  
[INFO] --------------------------------------------------------- 

Toutes les données relatives à la configuration réalisée au départ sont mises en avant dans cette commande, à savoir : JAVA_HOME (/opt/jdk) et MAVEN_OPTS (-Xms128m -Xmx256m).

Il est ainsi plus facile de comprendre pourquoi tous les arguments de la JVM peuvent être configurés avec la variable d’environnement...

Maven et les plugins

1. Introduction aux plugins

Apache Maven est principalement géré par les plugins, puisque tous les traitements réalisés au sein d’un projet lors d’un cycle de vie sont liés aux goals ou Mojos (Maven old Java Object) issus de plugins.

Mojo, pour Maven old Java Object, est le nom donné à un goal défini par un plugin. Ce terme regroupe la classe Java annotée avec les métadonnées de la cible (nom, paramètres attendus) ainsi que la configuration qui associe cette cible à une phase d’un cycle de vie.

Ainsi, depuis le début de ce livre, tous les exemples réalisés ont exécuté des goals sur des plugins alors qu’il n’a jamais été question de la mise en place de plugins dans les procédures d’installation et qu’aucun plugin n’est intégré dans l’archive d’Apache Maven.

Comment cela fonctionne-t-il ?

Pour visualiser les étapes qu’Apache Maven réalise lors d’une commande qui fait appel à un plugin, il est intéressant de vider le référentiel local ($user.home/.m2/repository) et de lancer la commande mvn process-resources sur le projet de persistance dans lequel aucune configuration relative aux plugins n’est présente.

$ mvn process-resources 
[INFO] Scanning for projects... 
[INFO] --------------------------------------------------------- 
[INFO] Building banque-persistance 1.0.0-SNAPSHOT 
[INFO] --------------------------------------------------------- 
...  
Downloaded: 
http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- 
resources-plugin/2.6/maven-resources-plugin-2.6.pom 
...  
Downloaded: 
http://repo1.maven.org/maven2/org/apache/maven/plugins/maven- 
resources-plugin/2.6/maven-resources-plugin-2.6.jar 
... 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) 
@ banque-persistance --- 
[INFO] Copying 1 resource 
[INFO] --------------------------------------------------------- 
[INFO] BUILD SUCCESS 
[INFO] ---------------------------------------------------------- 

Un nouvel aperçu dans le référentiel local met en valeur les éléments téléchargés par Apache Maven pour ce traitement....

Gérer l’encodage des fichiers d’un projet

1. Définition de l’encodage

L’encodage des fichiers est une notion primordiale dans tout projet informatique Java ou autre. Il est souvent mal maîtrisé par les développeurs et peut être la source de problèmes s’il n’est pas géré dès le lancement du projet.

Apache Maven ne va pas résoudre les problèmes de norme de codage des caractères, s’ils sont déjà présents. Il est cependant nécessaire de le configurer correctement pour qu’il puisse détecter et alerter d’un problème lié à l’encodage.

Les sections suivantes présentent très succinctement le fonctionnement des normes de codage les plus utilisées dans les projets informatiques.

a. ASCII

L’ASCII est une norme de codage des caractères pour l’échange d’informations, créé par un Américain dans les années soixante. C’est la norme de base sur laquelle s’appuie la majorité des normes d’aujourd’hui.

Cette norme définit les codes informatiques binaires des 128 caractères nécessaires aux Américains pour communiquer dans leur langue. Ainsi, techniquement, il suffit de 7 bits (valeurs 0 à 127) pour représenter tous les caractères ASCII. Prenons l’exemple du caractère « A » :

 Caractère |  Code ASCII base 10  |    Code base 2(binaire)     | 
---------------------------------------------------------------- 
    A     |          65          |          1000001            | 

Seulement, dans cette norme aucun des caractères accentués présents dans les autres langues n’est pris en compte.

b. ISO-8859-1

Pour pallier le problème lié à l’absence de codage en ASCII des caractères spécifiques aux autres langues, la norme ISO-8859 a été créée en 1987. Elle exploite le 8e bit d’un octet non utilisé par l’ASCII pour définir 128 caractères de plus, soit 256 caractères. Comme ce n’était toujours...

En résumé

À travers ces deux chapitres, une première partie des notions de base d’Apache Maven a été mise en œuvre et expliquée.

À ce stade du livre, il est ainsi possible, à partir d’un poste vierge, de rapidement installer Apache Maven, de le configurer (pour les options de bases) et de créer un projet pour une bibliothèque logicielle de type JAR, d’y exécuter les tests unitaires, la compilation et de créer l’archive pour l’utiliser dans un environnement Java.

Ces premières commandes agrémentées de configuration au sein de fichiers XML (settings.xml, pom.xml) permettent de comprendre la philosophie et le fonctionnement général d’Apache Maven autour des notions de cycle de vie, de phases et de plugins.