Apache Maven

Apache Maven
Page d'aide sur l'homonymie Pour les articles homonymes, voir Maven.
Apache Maven
Maven logo.svg
Développeur Apache Software Foundation
Dernière version 3.0.3 (3 mars 2011) [+/-]
Environnement Multi-plateforme
Type Moteur de production
Licence Apache 2.0 licence
Site web maven.apache.org

Apache Maven est un outil logiciel libre pour la gestion et l'automatisation de production des projets logiciels Java en général et Java EE en particulier. L'objectif recherché est comparable au système Make sous Unix : produire un logiciel à partir de ses sources, en optimisant les tâches réalisées à cette fin et en garantissant le bon ordre de fabrication.

Il est semblable à l'outil Ant, mais fournit des moyens de configuration plus simples, eux aussi basés sur le format XML. Maven est géré par l'organisation Apache Software Foundation. Précédemment Maven était une branche de l'organisation Jakarta Project.

Maven utilise un paradigme connu sous le nom de Project Object Model (POM) afin de décrire un projet logiciel, ses dépendances avec des modules externes et l'ordre à suivre pour sa production. Il est livré avec un grand nombre de tâches pré-définies, comme la compilation de code Java ou encore sa modularisation.

Maven est un outil très riche qui gagne beaucoup de terrain.

Un élément clé et relativement spécifique de Maven est son aptitude à fonctionner en réseau. Une des motivations historiques de cet outil est de fournir un moyen de synchroniser des projets indépendants : publication standardisée d'information, distribution automatique de modules jar. Ainsi en version de base, Maven peut dynamiquement télécharger du matériel sur des dépôts logiciels connus. Il propose ainsi la synchronisation transparente de modules nécessaires.

Maven1 et Maven2 ont été développés en parallèle mais les versions futures seront basées sur la structure de la deuxième version. Les parties suivantes de l'article traitent en priorité Maven2.

Sommaire

Project Object Model (POM)

Chaque projet ou sous-projet est configuré par un POM qui contient les informations nécessaires à Maven pour traiter le projet (nom du projet, numéro de version, dépendances vers d'autres projets, bibliothèques nécessaires à la compilation, noms des contributeurs etc.). Ce POM se matérialise par un fichier pom.xml à la racine du projet. Cette approche permet l'héritage des propriétés du projet parent. Si une propriété est redéfinie dans le POM du projet, elle recouvre celle qui est définie dans le projet parent. Ceci introduit le concept de réutilisation de configuration. Le fichier pom du projet principal est nommé pom parent.

Convention plutôt que configuration

Maven impose une arborescence et un nommage des fichiers du projet selon le concept de Convention plutôt que configuration. Ces conventions permettent de réduire la configuration des projets, tant qu'un projet suit les conventions. Si un projet a besoin de s'écarter de la convention, le développeur le précise dans la configuration du projet.

Voici une liste non-exhaustive des répertoires d'un projet Maven :

  • /src : les sources du projet
  • /src/main : code source et fichiers source principaux
  • /src/main/java : code source
  • /src/main/resources : fichiers de ressources (images, fichiers annexes etc.)
  • /src/main/webapp : webapp du projet
  • /src/test : fichiers de test
  • /src/test/java : code source de test
  • /src/test/resources : fichiers de ressources de test
  • /src/site : informations sur le projet et/ou les rapports générés suite aux traitements effectués
  • /target : fichiers résultat, les binaires (du code et des tests), les packages générés et les résultats des tests

Cycle de vie

Les buts (goals en anglais) principaux du cycle de vie d'un projet Maven sont:

  • compile
  • test
  • package
  • install
  • deploy

L'idée est que, pour n'importe quel but, tous les buts en amont doivent être exécutés sauf s'ils ont déjà été exécutés avec succès et qu'aucun changement n'a été fait dans le projet depuis. Par exemple, quand on exécute mvn install, Maven va vérifier que mvn package s'est terminé avec succès (le jar existe dans target/), auquel cas cela ne sera pas -exécuté.

D'autres buts sont exécutables en dehors du cycle de vie et ne font pas partie du cycle de vie par défaut de Maven (ils ne sont pas indispensables). Voici les principaux :

  • clean
  • assembly:assembly
  • site
  • site-deploy
  • etc...

Ils peuvent néanmoins être rajoutés au cycle de vie via le POM du projet.

Gestion des dépendances

La gestion des dépendances au sein de Maven est simplifiée par les notions dhéritage et de transitivité. La déclaration de ces dépendances est alors limitée.

Par contre la transitivité recèle encore des lacunes et peut causer des petits soucis sur les gros projets. En effet, la transitivité est automatique par défaut et engendre ainsi des réactions quon ne désirait pas spécialement, comme :

  • inclure un jar dans un ear,
  • inclure telle ou telle version au lieu dune autre,
  • avoir des dépendances avec des versions différentes mais à des niveaux différents de la transitivité (un projet A dépend dun projet C.x et du projet B, et ce dernier dépend du projet C.y etc.)

Sans oublier quen utilisant la transitivité dans les gros projets, on perd de linformation (par exemple : les dépendances effectives) et on se retrouve dépendants de projets alors qu'il n'y a pas de dépendance dans le code.

Pour résoudre ces différents problèmes, il suffit de désactiver cette option avec loption "provided" en attendant une amélioration du plugin.

Référentiel (ou entrepôts)

Un autre apport de l'outil Maven est son organisation des projets et plugins. Maven dispose de plusieurs référentiels à plusieurs niveaux. Le but du référentiel est de rendre disponible aussi bien les plugins utilisés ou envisagés de lêtre que les projets générés par Maven. On peut bien sûr y installer des projets pour les utiliser (sans quils ne soient générés par Maven). Il y a trois référentiels :

  • Un au niveau de la machine du développeur, appelé repository local, il inclut tout ce que le développeur a utilisé et a développé.
  • Un au niveau du site Maven qui contient lensemble des plugins. Il est en augmentation continue. Il est ouvert à tout le monde, en conséquence des mises à jour pourraient être incohérentes ou incompatibles avec dautres.
  • Pour éviter ceci, il y a un troisième référentiel (facultatif) qui peut être déclaré au niveau de lentreprise ou la structure utilisant Maven, il joue lintermédiaire entre les deux premiers référentiels, il inclut les plugins (⇒ maîtrise des versions et des mises à jour) et les projets (les rendant accessible à lensemble des développeurs).

Pour créer un référentiel pour lentreprise (ou un référentiel commun en général), on peut utiliser les protocoles ftp, scp, file et http.

Remarque: le plugin fourni pour le protocole ftp pose problème car pas encore au point.

Pour installer un jar dans le référentiel (sans quil ne soit un projet maven), il faut bien générer le POM avec lui. Sans cela Maven essaye de se connecter dans les différents référentiels pour le chercher d' une réelle perte de temps vu que le jar nest pas supposé être présent dans ces référentiels.

Une dernière remarque, de taille : dans le référentiel, il y a une structure bien définie et inchangeable (qui permet à Maven de trouver son chemin), les jar et les projets sont organisés selon le groupId, artifactId puis la version.

Donc une fois une déclaration faite (dépendance ou autre), Maven cherche dans lemplacement suivant :

{emplacement Repository}/groupId/artifactId/version

Les noms des packages, eux, sont comme suit :

{artifactId}-{version}.{package}

Et à lopposé du répertoire "target" on peut définir le nom de notre package, il nest pas permis de changer les noms ou la structure des packages sous peine de non-reconnaissance de package et donc de "BUILD FAILED".

Rapports

Les rapports générés par Maven portent sur :

  • les dépendances du projet,
  • les résultats des tests lancés, incluant
  • des statistiques sur les résultats,
  • le pourcentage defficacité de ces tests.
  • le pourcentage de code testé,
  • la complexité du code,
  • le respect de telle ou telle norme de codage,
  • etc

Plugins

Les plugins rajoutent des fonctionnalités à cet outil lui permettant dêtre plus puissant, ces plugins sont disponibles sur le site de Maven, et, à défaut, peuvent être développés. Pour utiliser un plugin, il suffit de le déclarer dans le POM.

À savoir que la déclaration est héritée par défaut. La déclaration se fait dune manière simple : groupId (si aucun nest déclaré, il prend celui par défaut org.apache.maven), artifactId et éventuellement la version (sinon, cest la dernière version qui est utilisée).

Après cette déclaration, lors du lancement dune tâche, Maven vérifie sa présence dans le référentiel local. Sil ne trouve pas le plugin, il se connecte alors au référentiel central pour le télécharger. En cas d'échec de récupération, on termine lexécution avec un message derreur (à savoir quon peut éviter ceci et demander à Maven de continuer et de donner le résultat du traitementavec les messages derreurs- à la fin).

Par contre, le paramétrage des plugins est rendu difficile par le peu de documentation des différentes fonctions quils offrent. Même sur Internet, le résultat de leur recherche s'est avéré peu fructueux.

Aussi, une liste détaillée des plugins disponibles avec leurs fonctions nexiste pas, on a juste leurs noms (quon trouve sur le référentiel de maven).

Maven et Eclipse

Eclipse permet de générer des packages, mais ces derniers ne respectent pas la structure de Maven et ne sont pas non plus installés dans le référentiel. Cela implique que sans lutilisation dun outil externe, il faut installer manuellement tous les packages générés.

Un plugin Maven pour Eclipse est disponible, permettant à Eclipse dutiliser Maven en arrière-plan et donc d'utiliser Eclipse et Maven conjointement.

Ceci permet davoir des projets Maven générés et stockés dans le référentiel.

Il permet notamment de dépendre de projets qui sont dans le référentiel, et donc on na pas besoin de les importer sous Eclipse comme cest le cas dans les outils existant. Le classpath est généré par Maven.

Par contre son utilisation comporte quelques lacunes.

Si on lance la commande qui génère le classpathmvn eclipse:eclipseà partir dun POM parent, alors lensemble des modules doivent être présents dans lespace de travail. La dépendance est faite à lintérieur de cet espace, et pour avoir une dépendance à partir du référentiel, il faut lancer la commande pour chaque module !!

Un autre problème (actuellement sans solution), porte sur lhéritage quand on ne respecte pas la hiérarchie dans les répertoires.

Remarques
  • Dans le POM, le chemin daccès au POM du module est défini dans le tag module, et donc on peut utiliser des ../ pour aller à des répertoires qui sont au même niveau (une structure en plan).
  • Dans le cas dune structure en plan, le plugin Eclipse ne reconnaît pas le POM parent, car par défaut il cherche dans les répertoires au-dessus (et a priori impossible de le changer).
  • Ce plugin permet à Eclipse de rajouter Maven comme un outil externe, au même titre que ANT.

Intégration continue

Voici une liste non exhaustive des moteurs d'intégration continue qu'il est possible d'utiliser conjointement avec Maven :

Analyse de la qualité du code

Voici une liste non exhaustive des plate-forme d'analyse de la qualité du code source qu'il est possible d'utiliser conjointement avec Maven :

Lien externe

Sur les autres projets Wikimedia :


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Apache Maven de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • Apache Maven — Тип Автоматизация сборки Разработчик …   Википедия

  • Apache Maven — Developer(s) Apache Software Foundation Stable release 3.0.3[1] / March 3, 2011 …   Wikipedia

  • Apache Maven — Entwickler Apache Software Foundation Aktuelle Version 3.0.3[1] (3 …   Deutsch Wikipedia

  • Maven — Desarrollador Apache Software Foundation http://maven.apache.org …   Wikipedia Español

  • Apache Ant — (Another Neat Tool) Тип Билд утилиты Разработчик …   Википедия

  • Apache Ivy — Entwickler Apache Software Foundation Aktuelle Version 2.2.0 (30. September 2010 [1]) Betriebssystem plattformübergreifend …   Deutsch Wikipedia

  • Maven — ist ein Wort der englischen Sprache mit hebräisch jiddischen Wurzeln und bezeichnet einen, meist selbsternannten Experten eines einzelnen Wissensbereiches, der versucht, sein Wissen an andere weiterzugeben. Als Teil des Produktnamens wird es… …   Deutsch Wikipedia

  • Apache Incubator — is the gateway for Open source projects intended to become fully fledged Apache Software Foundation projects.The Incubator project was created in October 2002 to provide an entry path to the Apache Software Foundation for projects and codebases… …   Wikipedia

  • Apache CXF — Entwickler Apache Software Foundation Aktuelle Version 2.4.0 (18. April 2011) Betriebssystem plattformübergreifend Programmier­sprache Java …   Deutsch Wikipedia

  • MAVEN — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Maven peut désigner : Apache Maven, un outil logiciel libre pour la gestion et l automatisation de production des projets logiciels Java MAVEN, une… …   Wikipédia en Français

Share the article and excerpts

Direct link
https://fr-academic.com/dic.nsf/frwiki/119337 Do a right-click on the link above
and select “Copy Link”