web-dev-qa-db-fra.com

Ordre de construction du projet multi-modules Maven?

La situation est, j'ai deux projets multimodules Maven avec la même structure:

 Parent 
 - Module 1 
 - Module 2 

Quand je construis le projet 1, je vois que le parent est construit en premier (l'ordre est parent-> module1-> module2). Cependant pour le projet 2, le parent est enfin construit (l'ordre est module1-> module2-> parent). Pourquoi les deux projets ont-ils des ordres de construction différents? De plus, comment puis-je contrôler manuellement l'ordre de construction?

Mise à jour 1:
Les deux projets parents sont de simples projets POM sans code source, donc je ne peux pas expliquer l'ordre de construction selon le graphique des dépendances.

Mise à jour 2:
Les POM parents sont les mêmes sauf les noms de module GAV et enfant:

 <? xml version = "1.0" encoding = "UTF-8"?> 
 <project xmlns = "http://maven.Apache.org/POM/4.0.0" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation = "http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd /maven-4.0.0.xsd">
 <modelVersion> 4.0.0 </modelVersion> 
 <groupId> parent-group-id </groupId> 
 <artifactId> parent-artifact-id </artifactId> 
 <version> parent-version </version> 
 <packaging> pom </packaging> 
 <name> parent-name </ nom> 
 <modules> 
 <module> module-1 </module> 
 <module> module-2 </module> 
 </modules> 
 </project> 
47
Zhao Yi

L'ordre de construction est déterminé par le réacteur Maven qui est un mécanisme qui garantit automatiquement l'ordre de construction correct pour les constructions multimodules en triant les projets.

Voir la documentation officielle pour savoir comment cela fonctionne.

Ça dit:

Les relations suivantes sont respectées lors du tri des projets:

  • une dépendance du projet sur un autre module de la build
  • une déclaration de plugin où le plugin est un autre module de la construction
  • une dépendance du plugin sur un autre module de la build
  • une déclaration d'extension de build sur un autre module de la build
  • l'ordre déclaré dans l'élément (si aucune autre règle ne s'applique)

Vous ne pouvez pas contrôler manuellement l'ordre de génération. Si vous souhaitez modifier l'ordre, vous devez apporter des modifications à votre projet qui influencent l'ordre de tri du réacteur.

38
Kai Sternad

À un niveau élevé, l'ordre de construction est basé sur un tri topologique du graphe de dépendance du module.

EDIT: Question pour vous. Je comprends que le projet 1 contient deux modules, tout comme le projet 2. Mais les modules du projet 2 déclarent-ils explicitement le pom "parent" comme parent? Je pense que peut-être vos modules de projet 1 déclarent explicitement le pom parent, et les modules de projet 2 ne le font pas. Ce qui signifierait que le "parent" du projet 2 n'est pas vraiment un parent du tout et ne doit donc pas être construit avant les modules. C'est ma supposition de toute façon.

11
Willie Wheeler

J'ai vécu ce problème récemment avec Centos 7. J'ai mis à jour maven vers 3.5.3 à partir de 3.0.5 et ce problème a été résolu. Si quelqu'un a ce problème, essayez-le d'abord.

2
user2291161