Présentation d'Apache Maven
Qu’est-ce qu’Apache Maven ?
1. Définition
Apache Maven est souvent défini comme un simple outil de construction pour les projets Java. C’est effectivement une de ses principales fonctionnalités et ce pourquoi il a été créé à l’origine. Seulement, un logiciel capable, comme Apache Maven, de tenir une place primordiale dans l’écosystème du développement d’application informatique ne peut pas prendre simplement part à la construction du produit.
Maven se considère logiquement comme un élément central dans la gestion d’une infrastructure de projet informatique, définition justifiée par :
-
Son implication dans la construction du livrable final, dans la gestion des bibliothèques logicielles de dépendances, essentielle à la pérennité d’un logiciel, et dans la génération de la documentation nécessaire à la compréhension du projet.
-
Sa capacité à publier un site web et générer des rapports liés à la mesure de la qualité du produit.
-
Son rôle dans la publication des versions de livraison sur les plates-formes cibles.
-
Sa modularité basée sur la notion de plugins, facilitant ainsi l’ajout d’outils et de fonctionnalités lors du cycle de vie du projet.
Apache Maven est basé sur une notion fondamentale : le POM (Project Object Model). Écrit essentiellement en XML (Extensible Markup Language), le fichier POM est l’unique descripteur du projet et seul garant de l’identification d’un projet Java comme projet Apache Maven.
Pour réussir à se faire une place aussi importante au sein de la conduite de projet informatique, Apache Maven a su imposer sa philosophie principale : les conventions et normes de standardisation d’un projet doivent prendre le pas sur la configuration (convention over configuration). Autrement dit, la mise en place et le respect de conventions dans un projet sont les bases nécessaires pour sa réussite....
La communauté Maven
1. Les acteurs d’Apache Maven
Apache Maven est avant tout un projet communautaire de la fondation Apache (ASF). Il est par ailleurs sponsorisé en partie sous forme de main d’œuvre par d’autres sociétés comme Sonatype. À l’instar de tout projet open source de cette importance, il nécessite une charge de travail élevée partagée entre :
-
Le développement du projet (nouvelles fonctionnalités, optimisation des performances...).
-
La maintenance et les corrections sur les versions en cours et ultérieures.
-
Une aide technique auprès de la communauté d’utilisateurs (listes de diffusions).
-
La rédaction de supports de documentation.
-
L’animation de conférence auprès de développeurs, architectes et chef de projets.
-
La suggestion de propositions destinées à améliorer le projet.
Sonatype est la société fondée par le créateur d’Apache Maven, Jason Van Zyl. Elle intervient sur de nombreux aspects du projet, avec par exemple le développement de la bibliothèque logicielle de gestion des dépendances Aether incluse dans la version 3.0 de Maven. Sonatype propose également de la documentation et des services pour étendre l’utilisation d’Apache Maven (le gestionnaire de référentiels Nexus par exemple).
a. Des rôles bien définis
L’équipe du projet Apache Maven est composée de plus de 50 personnes réparties dans le monde entier, notamment en France.
Tout projet de la fondation Apache respecte la même organisation, basée sur les notions de rôles attribués aux membres de l’équipe qui composent le projet. Chaque rôle accorde des niveaux de droits plus ou moins élevés concernant, par exemple, les décisions prises au sujet du projet ou plus concrètement sur la possibilité d’avoir un accès en écriture sur le code source.
Toutes les décisions sont prises par le comité de gestion du projet (PMC : Project Management Committees) : un sous-ensemble de l’équipe...
Installation d’Apache Maven
1. Prérequis : la plate-forme Java
a. Présentation de Java SE
Apache Maven est une application développée en Java et qui nécessite la présence du JDK (Java Development Kit) pour fonctionner. Le JDK et le JRE (Java Runtime Environment) sont les deux éléments qui composent la plate-forme Java SE (Java Standard Edition).
Le JRE contient les bibliothèques logicielles (ou API pour Application Programming Interface), une machine virtuelle Java (JVM : Java Virtual Machine) et les composants nécessaires au fonctionnement d’applications développées en Java.
La machine virtuelle Java est conçue pour interpréter et exécuter le bytecode Java issu de la compilation du code source écrit lors du développement. La JVM est spécifique au type de système d’exploitation (Windows, Linux...) et de matériel associé (32-bits, 64-bits...), pour ainsi garantir un fonctionnement similaire sur ces différentes plates-formes avec le même code source écrit en Java.
Le JDK est une surcouche du JRE. Il se compose donc du JRE auquel il faut ajouter tous les éléments indispensables au développement d’applications Java, comme le compilateur et le débogueur.
Java SE est donc composé d’un ensemble d’API et de technologies autour de Java permettant de créer et faire fonctionner, sur les systèmes d’exploitation majeurs, des applications serveurs, des applications dites clients riches et des applets.
La société Sun Microsystems, à l’origine du langage Java en 1995, a été rachetée début 2009 par Oracle. Ce processus d’acquisition de Sun par Oracle s’est totalement finalisé en Janvier 2010.
Apache Maven, comme d’autres applications Java destinées au développement, a besoin d’accéder aux outils présents dans le JDK, par exemple à la commande javac pour compiler les fichiers sources Java. La solution standard, utilisée dans les procédures d’installation qui vont suivre, est d’indiquer à Maven l’emplacement du JDK grâce aux variables d’environnement du système.
Les variables d’environnement donnent la possibilité d’accéder...
Le POM (Project Object Model)
1. Présentation
Le POM (Project Object Model) est le descripteur d’un projet Apache Maven, au format XML. Ce fichier, nommé pom.xml, définit à lui seul un projet Maven.
Il propose un modèle de données étudié pour identifier tous les éléments indispensables au projet : de l’emplacement des sources aux mails des développeurs en passant par l’URL d’accès au site web ou les bibliothèques logicielles de dépendances du projet.
a. Format du fichier pour le POM
Des futures versions de Maven 3.x devraient offrir la possibilité d’écrire les fichiers POM dans un autre format que le XML (YAML ou Groovy par exemple). Toutefois, ces fonctionnalités demandent un travail important au sein du projet car toute la configuration est aujourd’hui basée sur ce format.
Le format XML est souvent décrié pour sa syntaxe verbeuse et la lourdeur des fichiers qui en résulte. Néanmoins, il est facilement compréhensible, complètement intégré dans les environnements de développement (argument non négligeable pour éviter les erreurs de structure et ainsi la perte de temps en développement) et il est devenu le format de référence pour l’échange de données.
C’est ainsi que, depuis sa création, le projet Apache Maven a choisi XML comme format standard pour tous ses fichiers de description ou de configuration.
b. Exemple de POM minimal
Comme son nom l’indique le POM, Project Object Model, est un modèle de données objet pour le projet, il est donc normal que l’élément racine du fichier XML soit l’élément project.
Les éléments obligatoires dans un fichier POM sont les suivants :
-
modelVersion : précise la version du modèle objet utilisé.
-
groupId : POM;groupIdidentifie le projet dans un espace de nommage.
-
artifactId : correspond à la valeur principale contenue dans le nom du fichier de sortie construit par le projet (fichier XML ou archive).
-
version : donne la version en cours du projet.
<project xmlns="http://maven.apache.org/POM/4.0.0" ...
Configurer l’installation d’Apache Maven
1. Qu’est-ce qu’un référentiel (repository) ?
Un référentiel est un emplacement sur un système de fichiers, qui contient des bibliothèques logicielles organisées selon une arborescence spécifique à Maven (basée sur les notions de groupId, artifactId et version) et indexées grâce à des fichiers XML (metadata.xml).
On distingue deux types de référentiels dans l’écosystème Maven :
-
Le référentiel local (local repository) : emplacement sur le système de fichiers local où sont stockées et indexées toutes les bibliothèques logicielles et plugins nécessaires au fonctionnement d’Apache Maven et du projet en cours de développement.
-
Le référentiel distant (remote repository) : emplacement distant par rapport au serveur à partir duquel les bibliothèques logicielles et plugins sont téléchargés pour faire fonctionner Maven et le projet. Il permet d’alimenter le référentiel local.
Ainsi dans l’extrait précédent du Super POM, les premières informations définissent le référentiel de base de Maven, identifié, par la clé central, comme référentiel par défaut des bibliothèques logicielles (<repositories>) et des plugins (<pluginsRepositories>) :
<id>central</id>
<name>...</name>
<url>http://repo1.maven.org/maven2</url>
2. Le fichier settings.xml
Lors de la procédure d’installation, aucune configuration propre à Apache Maven n’a été réalisée. Outre la configuration présente dans les pom.xml et le Super POM, le principal fichier de configuration externe à tout projet lu par Maven est le fichier...
Premières commandes Maven
1. Valider le POM
La première commande Apache Maven va permettre de valider la structure du POM créé précédemment, au regard du fichier XSD.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>fr.eni.mvnbook</groupId>
<artifactId>banque-persistence</artifactId>
<versions>1.0.0-SNAPSHOT</versions>
</project>
Ainsi, en exécutant la commande mvn validate à partir du répertoire où se situe le fichier pom.xml, Maven vérifie, entre autres, la conformité de la structure du POM :
$ mvn validate
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------------------------------------
[INFO] Building banque-persistence 1.0.0-SNAPSHOT
[INFO] ---------------------------------------------------------
[INFO] ---------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ---------------------------------------------------------
[INFO] Total time: 0.531s
...
[INFO] Final Memory: 1M/30M
[INFO] ----------------------------------------------------------
2. Afficher le POM complet
Le POM qui vient d’être validé est en réalité plus complet que les quelques lignes affichées. En effet, du fait de l’héritage implicite du Super POM d’Apache Maven, il contient toutes les données définies dans celui-ci.
Il est possible d’avoir une vue complète du POM grâce à la commande mvnhelp:effective-pom. Cette commande est issue du plugin maven-help-plugin qui est téléchargé...
Maven au cœur de l’infrastructure projet
1. Présentation du projet "banque"
Le projet réalisé tout au long de ce livre a pour objectif de mettre en application les fonctionnalités majeures d’Apache Maven à travers un exemple proche d’un cas d’entreprise.
Qu’est-ce que c’est ?
Le projet réalisé est une application permettant aux clients d’une banque de suivre le solde de leurs comptes bancaires, mais également de réaliser des virements entre leurs comptes.
Pour atteindre cet objectif, le projet est composé de plusieurs éléments :
-
Une application web permettant l’accès à ses fonctionnalités via un navigateur web sur un PC.
-
Un Web Service exposant les fonctionnalités à destination de futures applications mobiles que la banque souhaiterait développer pour des smartphones ou des tablettes.
Le schéma ci-après présente l’architecture globale du projet.
2. Spécifications du projet "banque"
a. Les spécifications fonctionnelles
L’application web
L’application web du projet est une IHM (interface homme-machine) principalement composée de quatre écrans :
-
La page d’accueil permettant de présenter la banque et ses activités ; elle possède un lien pour la connexion des clients.
-
La page contenant le formulaire...