wake-up-neo.com

Build-Reihenfolge von Maven Multi-Modul-Projekt?

Die Situation ist, ich habe zwei Maven Multimodul-Projekte mit der gleichen Struktur:

 Elternteil 
 - Modul 1 
 - Modul 2 

Beim Erstellen von Projekt 1 wird zuerst das übergeordnete Element erstellt (Reihenfolge ist übergeordnet-> Modul1-> Modul2). Für Projekt 2 wird jedoch zuletzt das übergeordnete Element erstellt (Reihenfolge ist Modul1-> Modul2-> übergeordnetes Element). Warum haben die beiden Projekte unterschiedliche Bauaufträge? Wie kann ich außerdem den Erstellungsauftrag manuell steuern?

pdate 1:
Da es sich bei beiden übergeordneten Projekten um einfache POM-Projekte ohne Quellcode handelt, kann ich die Erstellungsreihenfolge gemäß dem Abhängigkeitsdiagramm nicht erläutern.

pdate 2:
Die übergeordneten POMs sind bis auf die Namen der GAV- und untergeordneten Module identisch:

 <? 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> übergeordnete Gruppen-ID </ groupId> 
 <artifactId> übergeordnete Artefakt-ID </ artifactId> 
 <version> übergeordnete Version </ version> 
 <packaging> pom </ packaging> 
 <name> übergeordneter Name </ Name> 
 <Module> 
 <Modul> Modul-1 </ Modul> 
 <Modul> Modul-2 </ Modul> 
 </ Module> 
 </ project> 
47
Zhao Yi

Die Erstellungsreihenfolge wird vom Maven-Reaktor bestimmt. Dieser Mechanismus stellt automatisch die richtige Erstellungsreihenfolge für Multimodul-Erstellungen sicher, indem die Projekte sortiert werden.

Siehe die offizielle Dokumentation wie es funktioniert.

Es sagt:

Die folgenden Beziehungen werden beim Sortieren von Projekten berücksichtigt:

  • eine Projektabhängigkeit von einem anderen Modul im Build
  • eine Plugin-Deklaration, in der das Plugin ein weiteres Modul im Build ist
  • eine Plugin-Abhängigkeit von einem anderen Modul im Build
  • eine Build-Erweiterungsdeklaration für ein anderes Modul im Build
  • die im Element deklarierte Reihenfolge (falls keine andere Regel gilt)

Sie können die Erstellungsreihenfolge nicht manuell steuern. Wenn Sie die Reihenfolge ändern möchten, müssen Sie Änderungen an Ihrem Projekt vornehmen, die die Reaktorsortierreihenfolge beeinflussen.

38
Kai Sternad

Auf einer hohen Ebene basiert die Erstellungsreihenfolge auf einem topologische Sortierung des Modulabhängigkeitsgraphen.

EDIT: Frage an Sie. Ich verstehe, dass Projekt 1 zwei Module enthält, und Projekt 2. Aber deklarieren die Module in Projekt 2 das übergeordnete POM explizit als übergeordnetes POM? Ich denke, dass möglicherweise Ihre Module des Projekts 1 explizit das übergeordnete pom deklarieren, und die Module des Projekts 2 nicht. Was bedeuten würde, dass das Projekt 2 "parent" überhaupt kein Elternteil ist und daher nicht vor den Modulen erstellt werden muss. Das ist sowieso meine Vermutung.

11
Willie Wheeler

Ich habe dieses Problem in letzter Zeit mit Centos 7 gelöst. Ich habe maven von 3.0.5 auf 3.5.3 aktualisiert und dieses Problem wurde behoben. Wenn jemand dieses Problem hat, versuchen Sie es zuerst.

2
user2291161