Apache Maven - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Gestion des dépendances

La gestion des dépendances au sein de Maven est simplifiée par les notions d’hé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 qu’on ne désirait pas spécialement, comme :

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

Sans oublier qu’en utilisant la transitivité dans les gros projets, on perd de l’information (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 l’option "provided" en attendant une amélioration du plugin.

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 d’une manière simple : groupId (si aucun n’est déclaré, il prend celui par défaut org.apache.maven), artifactId et éventuellement la version (sinon, c’est la dernière version qui est utilisée).

Après cette déclaration, lors du lancement d’une tâche, Maven vérifie sa présence dans le référentiel local. S’il 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 l’exécution avec un message d’erreur (à savoir qu’on peut éviter ceci et demander à Maven de continuer et de donner le résultat du traitement –avec les messages d’erreurs- à la fin).

Par contre, le paramétrage des plugins est rendu difficile par le peu de documentation des différentes fonctions qu’ils 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 n’existe pas, on a juste leurs noms (qu’on trouve sur le référentiel de maven).

Rapports

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

  • les dépendances du projet,
  • les résultats des tests lancés, incluant

Intégration continue

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

  • (en) continuum
  • (en) Bamboo (Atlassian)
  • (en) Cruise Control
  • Hudson
  • (en) TeamCity (JetBrains)

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 l’utilisation d’un outil externe, il faut installer manuellement tous les packages générés.

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

Ceci permet d’avoir 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 n’a pas besoin de les importer sous Eclipse comme c’est 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 classpath ‘mvn eclipse:eclipse’ à partir d’un POM parent, alors l’ensemble des modules doivent être présents dans l’espace de travail. La dépendance est faite à l’inté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 l’héritage quand on ne respecte pas la hiérarchie dans les répertoires.

Remarques
  • Dans le POM, le chemin d’accè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 d’une 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.
Page générée en 0.092 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise