web-dev-qa-db-fra.com

Comment faire maven build du module enfant avec le module parent?

J'ai plusieurs modules dans mon projet et ils dépendent les uns des autres directement ou transitivement. Quand je maven construis "Project A" certains où "Project D" est construit automatiquement.

Project A > Project B  > Project C > Project D

where > means Project B depends on Project A

Le snipeet pom "Projet D" c'est:

<project xmlns="...">
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.myProduct</groupId>
    <artifactId>build-MyProjectD</artifactId>
    <name>MyProjectD</name>
    ........
</project>

Comme le bâtiment "Project A" construit automatiquement "Project B", selon ma compréhension pour que cela se produise quelque part build-MyProjectD devrait être ajouté comme dépendance dans l'un de ces projets Project A > Project B > Project C mais je n'ai trouvé aucune référence de chaîne build-MyProjectD sous les poms de ces projets.

Une idée comment existe-t-il une autre façon de créer un module enfant (dans ce cas "Project D") sans avoir la présence de l'enfant artifactId dans le projet en amont?

9
scott miles

Vous devez créer un projet d'agrégateur. Voir le lien pour plus d'informations sur le concept d'agrégation .

Fondamentalement, vous créez un projet parent contenant plusieurs "modules". Lors de la construction du parent, les modules sont également automatiquement construits.

Si vous déclarez des dépendances entre les modules, Maven construira automatiquement les différents modules dans un ordre correct de sorte que si "Project A" dépend de "Project B", "Project B" est construit en premier puis "Project A" est construit de telle sorte que son artefact est disponible pour la construction du deuxième artefact.

Voir aussi cette question de la FAQ du Maven .

17
Guillaume Polet

Pour un projet parent, Maven construira tous les modules enfants lors de la construction du projet parent. Ajoutez les modules à votre pom parent. En supposant que A est votre projet parent

  <modules>
    <module>projectB</module>
    <module>projectC</module>
    <module>projectD</module>
  </modules>

et dans les modules (B, C et D), ajoutez le projet A comme parent (Ceci est facultatif, merci @ Guillaume Polet )

 <parent>
   <groupId>foo.bar</groupId>
   <artifactId>ProjectA</artifactId>
   <version>1.0-SNAPSHOT</version>
 </parent>

Donc, si vous construisez projectA, il construira ProjectB, ProjectC et ProjectD. Maven est également assez intelligent pour comprendre l'ordre de construction correct pour B, C et D.

10
xyz