2012-09-26 30 views
5

ho i seguenti progetti organizzati in modo strutturato piatta:Maven progetto multi-modulo e Jenkins

parentProject 
+-pom.xml 

projectWeb <depends on libraryA and libraryB> 
+-pom.xml 

libraryA 
+-pom.xml 

libraryB 
+-pom.xml 

Il pom.xml all'interno del parentProject ha riferimenti agli altri moduli e la sua utilizzati per eredità e dependencyManagement, ecco un piccolo estratto:

<project> 
    .... 
    <modules> 
     <module>../projectWeb</module> 
     <module>../libraryA</module> 
     <module>../libraryB</module> 
    </modules> 
    <dependencyManagement> 
    ... 
    </dependencyManagement> 
    <build> 
    ... 
    </build> 
    .... 
</project> 

In Jenkins ho un lavoro Maven per ogni progetto, e funziona bene quando costruire il parentProject, vale a dire. crea tutti i progetti a cui si fa riferimento nella sezione modules. Il problema che ho è quando si impegna a SVN una modifica in libraryA, mi aspetto che dopo la creazione di libraryA, una ricostruzione a projectWeb venga avviata, ma ciò non è accaduto. Qualcuno sa cosa sto sbagliando?

Grazie in anticipo.

EDIT

Quando rimuove la sezione modules da parentProject\pom.xml, funziona come scontato di, ma perdere il vantaggio di avere un'aggregazione pom genitore.

risposta

0

Questo deve essere configurato nel lavoro jenkins. Vedere "lavoro libraryA"/"Configurazione"/"Build Trigger"/"Costruire dopo altri progetti sono costruiti"

+0

Grazie per la risposta, ma mentre inserisco la domanda modificata, Se rimuovo i moduli dal genitore principale, le build sono attivate come previsto, cioè, se costruisco 'libraryA',' proyectWeb' viene creato automaticamente, senza la configurazione hai nominato. – sivainvi

1

Sembra che tu stai chiedendo il vostro POM genitore a fare due cose:

  1. impostare la gestione delle dipendenze roba
  2. aggregate vostro costruire

e 'generalmente meglio se si divide questo fuori in due pon - pon genitore per la # 1 e un pom aggregata per 2 #. Farebbe quindi avere qualcosa di simile ..

[root dir] aggregate pom.xml 
+ /parent 
+ /web 
+ /libA 
+ /libB 

Vedere questa risposta per maggiori dettagli: https://stackoverflow.com/a/3301162/211993

Farebbe quindi configurare Jenkins di controllare le directory root ed eseguire "mvn clean install"

+2

Puoi per favore approfondire perché "In genere è meglio se dividi ..."? Non sto dicendo che non lo è, ma non capisco perché è meglio. Purtroppo non l'ho capito dalla risposta a cui ti sei collegato. Grazie! – Ittai

+1

Quindi, inizialmente, aiuta solo con la separazione delle preoccupazioni: l'aggregatore è responsabile dell'ordine in cui i moduli sono costruiti, il genitore è responsabile delle versioni di dipendenza e cose come i dettagli della connessione scm. – dan

+1

Inoltre, ho visto esempi in cui le persone hanno suddiviso i loro genitori in parti comuni, che poi diventano i genitori di altri genitori. Supponiamo, ad esempio, che tu abbia un paio di progetti che usano Hibernate, puoi mettere quel gruppo di versioni in un genitore ibernato, e poi usarlo come un "super genitore" (per così dire, ho appena fatto quella frase su) fornendo versioni coerenti della libreria di sospensione su più progetti che non sono altrimenti collegati. Ma assicurati di volere davvero quell'approccio condiviso; stai unendo insieme più progetti che potrebbero non essere desiderabili. – dan

Problemi correlati