Il semble y avoir plusieurs façons de structurer les poms parent dans une construction multiprojet et je me demande si quelqu'un a des réflexions sur les avantages / inconvénients de chaque manière.
La méthode la plus simple pour avoir un pom parent serait de le mettre à la racine d'un projet, c'est-à-dire
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
où le pom.xml est à la fois le projet parent et décrit les modules -core -api et -app
La méthode suivante consiste à séparer le parent dans son propre sous-répertoire comme dans
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Où le pom parent contient toujours les modules mais ils sont relatifs, par exemple ../myproject-core
Enfin, il y a l'option où la définition du module et le parent sont séparés comme dans
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Où le pom parent contient une configuration "partagée" (dependencyManagement, propriétés, etc.) et où myproject / pom.xml contient la liste des modules.
L'intention est d'être évolutive à une construction à grande échelle, donc devrait être évolutive à un grand nombre de projets et d'artefacts.
Quelques questions bonus:
- Où est le meilleur endroit pour définir les différentes configurations partagées comme dans le contrôle de code source, les répertoires de déploiement, les plugins communs, etc. (je suppose que le parent mais j'ai souvent été mordu par cela et ils se sont retrouvés dans chaque projet plutôt que un commun).
- Comment le plug-in Maven, Hudson et Nexus traitent-ils la façon dont vous configurez vos multi-projets (peut-être une question géante, c'est plus si quelqu'un a été rattrapé par la façon dont une construction multi-projets a été configurée)?
Edit: Chacun des sous-projets a son propre pom.xml, je l'ai laissé de côté pour le garder concis.