2012-06-21 21 views
33

La situazione è, ho due progetti multimodulo Maven con la stessa struttura:Ordine di costruzione del progetto multimodulo Maven?

 
Parent 
    - Module 1 
    - Module 2 

Quando costruisco progetto 1, vedo che genitore è costruito il primo (ordine è genitore> module1-> Module2) . Tuttavia, per il progetto 2, genitore è stato creato alla fine (l'ordine è module1-> module2-> parent). Perché i due progetti hanno ordini di costruzione diversi? Inoltre, come posso controllare manualmente l'ordine di costruzione?

Update 1:
Entrambi i progetti genitori sono semplici progetti POM senza codice sorgente, quindi non posso spiegare l'ordine di generazione secondo il grafico delle dipendenze.

Update 2:
I POMs madri sono uguali tranne i nomi GAV e modulo bambino:

 
<?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</name> 
    <modules> 
     <module>module-1</module> 
     <module>module-2</module> 
    </modules> 
</project> 
+0

Possibile duplicato di [Impose build order per un multiprogetto in Maven] (http://stackoverflow.com/questions/6593503/impose-build-order-for-a-multi-project-in-maven) – nullpointer

risposta

24

L'ordine di generazione è determinata dal reattore Maven che è un meccanismo che assicura automaticamente corretta configurazione ordinare le build multimodule ordinando i progetti.

Vedere the official documentation per come funziona.

Dice:

le seguenti relazioni sono onorati durante l'ordinamento progetti:

  • una dipendenza progetto su un altro modulo nella build
  • una dichiarazione plug-in cui il plugin è un altro moduli la build
  • una dipendenza plug-in su un altro modulo nella build
  • una build extens Dichiarazione di ioni in un altro modulo nella build
  • l'ordine dichiarato nell'elemento (se si applica nessun altra regola)

Non è possibile controllare manualmente l'ordine di creazione. Se si desidera modificare l'ordine, è necessario apportare modifiche al progetto che influenzano l'ordinamento del reattore.

+0

Ma questo non spiega perché i due progetti abbiano ordini di costruzione diversi. –

+1

Potresti condividere i tuoi poms? –

+0

Vedere l'aggiornamento 2. –

9

Ad un livello elevato, l'ordine di compilazione si basa su un topological sort del grafico di dipendenza del modulo.

EDIT: Domanda per te. Capisco che il progetto 1 contenga due moduli e quindi il progetto 2. Ma i moduli del progetto 2 dichiarano esplicitamente il padre "genitore" come genitore? Sto pensando che forse i tuoi moduli del progetto 1 dichiarano esplicitamente il padre gen, e i moduli del progetto 2 no. Il che significherebbe che il "genitore" del progetto 2 non è realmente un genitore e quindi non deve essere costruito prima dei moduli. Questa è la mia ipotesi comunque.

+0

Ma entrambi i progetti principali sono semplici progetti POM senza alcun codice sorgente. Il grafico delle dipendenze non ha senso qui. –

Problemi correlati