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/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/src/webapp
: webapp du projet/target
: fichiers résultat, les binaires (du code et des tests), les packages générés et les résultats des testsUn 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 qu’ils ne soient générés par Maven). Il y a trois référentiels :
Pour créer un référentiel pour l’entreprise (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 qu’il 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'où une réelle perte de temps vu que le jar n’est 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), où 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 l’emplacement suivant :
{emplacement Repository}/groupId/artifactId/version
Les noms des packages, eux, sont comme suit :
{artifactId}-{version}.{package}
Et à l’opposé du répertoire "target" où on peut définir le nom de notre package, il n’est pas permis de changer les noms ou la structure des packages sous peine de non-reconnaissance de package et donc de "BUILD FAILED".