2012-11-14 12 views
8

Ho cercato per un po 'di tempo e non sono riuscito a trovare alcuna soluzione di lavoro o guida/tutorial per rilasciare i moduli Maven quando si utilizzano sottomoduli Git nidificati.Rilascio di più artefatti Maven quando si utilizzano sottomoduli Git nidificati

Abbiamo una struttura complessa di progetti pubblici e privati ​​che richiedono un ordine specifico per la compilazione. Il nostro obiettivo è eseguire una versione di Maven per taggare e distribuire più artefatti Maven in un unico passaggio.

Ecco il progetto/moduli semplificati Maven e Git struttura repository:

parent-public:1.0.0:pom (descriptor only, no Maven modules, public Git repository) 
    | | 
    | |- public-module:1.0.0-SNAPSHOT:jar 
    |  (Maven module, child of parent-public, Git submodule, public repository) 
    | 
    |- parent-private:1.0.0-SNAPSHOT:pom 
    (Maven modules, Git submodule, private repository) 
     | 
     |- public-module:1.0.0-SNAPSHOT:jar 
     | (Maven module only, child of parent-public, Git submodule, public repository, released) 
     | 
     |- private-module:1.0.0-SNAPSHOT:war 
      (Maven module, child of parent-private, released) 

L'attuale struttura consente Maven per creare e distribuire progetti/moduli in modo indipendente.

Al rilascio public-module (dal genitore-pubblico/genitore-privato/pubblico-modulo directory), i maven-release-plugin comporta bene (repository Git è stato taggato e rilasciare manufatto è stato distribuito).

Al rilascio parent-private, il maven-release-plugin prepara e avvia l'esecuzione il rilascio prima di fallire durante la bersaglio cassa (questo problema è discusso here, ma la soluzione non funziona nel mio contesto e non abbastanza la reputazione di commentare). ci

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <tagNameFormat>[email protected]{project.version}</tagNameFormat> 
     <commitByProject>true</commitByProject> 
     <pushChanges>true</pushChanges> 
    </configuration> 
</plugin> 

è un modo più elegante per organizzare moduli Maven e repository Git al fine di rilasciare più artefatti Maven:

Ecco la configurazione corrente maven-release-plugin? In alternativa, qualcuno ha trovato una soluzione per clonare in modo ricorsivo i sottomoduli Git durante il checkout poco prima della distribuzione degli artefatti?

+0

Che suona come un multi-Maven modulo build che di conseguenza deve essere in un singolo repository Git invece che sotto forma di sottomoduli.Inoltre usando una build multi-modulo puoi semplicemente distribuire/rilasciare l'intero modulo in un unico passaggio, quindi la domanda è perché ti piace rendere le cose più complicate ? – khmarbaise

+0

@khmarbaise: grazie per il tuo commento Abbiamo deciso di acquistare un singolo repository Git con più moduli Maven in quanto non siamo riusciti a trovare una soluzione _simple_ per la nostra struttura di progetto – almeidap

+1

IMHO non c'è davvero una buona opzione. i passaggi durante il rilascio stanno creando un _tag_, con th E semantico che il ripristino del codice da questo tag mi fornirà tutto il codice per questa versione. Ma con i sottomoduli GIT, non c'è modo di garantire che l'utente riceva tutto da quel tag, perché può facilmente vedere il sottomodulo come il primo. –

risposta

5

La risposta a questa domanda non è in grado di soddisfare la domanda iniziale, ma il plug-in Maven Release non è abbastanza intelligente da comprendere i limiti del git submodule. Penso che quello che stai cercando sia la possibilità per il plugin Maven Release di rilevare che una directory punta a un sottomodulo e che questo plug-in di release tagga automaticamente oltre i limiti? Questo non accadrà e non penso che sia sul piano di nessuno a questo punto.

Quello che consiglio sempre agli utenti Maven che usano Git non rompe mai i confini di un progetto multi-modulo che deve utilizzare il plugin Release tra i sottomoduli. Tenerlo confinato in un unico repository.

Ancora una volta, questo non è una grande risposta, ma dopo aver usato il rilascio plugin Maven per molti anni, è anche vero che non si tratta di un ottimo plugin :-(