2010-12-14 14 views
12

Attualmente ho circa 16 progetti che creo con Maven che vengono distribuiti nello stesso server applicazioni che costituisce qualcosa come un "portale". Ho creato un pom genitore per gestire dipendenze comuni e configurazioni di plugin. Attualmente, la mia struttura SVN è simile a questa:progetto multi-modulo maven con layout padre pom e svn

portal_root 
    +project1 
     +tags 
     +branches 
     +trunk 
    +project2 
     . 
     . 
     . 
    +projectn 
    pom.xml 

I singoli progetti vengono distribuiti separatamente. Cioè, project1 non ha una dipendenza da project2 e ognuno può essere modificato e distribuito senza dover modificare qualcos'altro.

Questo presenta un problema con SVN come se un altro sviluppatore volesse controllare l'intera radice del "portale" (per ottenere anche il padre genitore) anche per default tirano giù le copie di tutti i tag e rami! Non proprio ideale.

L'unica altra cosa che posso pensare è quello di usare qualcosa di simile:

portal_root 
    +tags 
    +branches 
    +trunk 
     +project1 
       +src 
       pom.xml 
     +project2 
      . 
      . 
      . 
     pom.xml 

Tuttavia, ora tutte le modifiche del progetto saranno monitorati nella cartella tags. Questo non è un problema enorme per me, ma la ramificazione ora sembra diventare un dolore.

Attualmente sto lavorando anche ad agganciare Teamcity in questo, il che sarebbe un po 'più facile ora, dato che dovrei solo guardare una singola directory (ad esempio i tag) per catturare tutto ciò che deve essere costruito. Sto anche distribuendo artefatti in un repository Nessus aziendale.

Spero che qualcuno possa darmi qualche suggerimento qui perché non sono riuscito a trovare alcuna documentazione decente che parla dell'intero ciclo di vita delle build e delle migliori pratiche qui.

Mi piace l'idea di poter creare e distribuire tutti i progetti con un singolo comando maven. Mi piace anche avere tutte le comuni dipendenze, informazioni sul repository e informazioni sui plugin in un unico posto.

risposta

25

È possibile utilizzare seguente schema:

+parent-project 
    pom.xml 
+child-project-1 
    pom.xml 
+child-project-2 
    pom.xml 

Nel progetto principale pom aggiuntivo:

<modules> 
    <module>../child-project-1</module> 
    <module>../child-project-2</module> 
</modules> 

Nei progetti per bambini pom aggiunge:

<parent> 
    <artifactId><!-- parent artifactId --></artifactId> 
    <groupId><!-- parent groupdId --></groupId> 
    <version><!-- parent version --></version> 
    <relativePath>../parent-project</relativePath> 
</parent> 

Bambini I progetti possono opzionalmente essere dipendente.

seguenti link possono anche aiutare:

+0

Questo ha risolto perfettamente il mio problema! Grazie! – Casey

+0

Assicurarsi di aggiungere i dati padre come dipendenza se si desidera utilizzare il progetto padre nel figlio. – cevaris

4

Una variante per l'approccio di Johns sarebbe quella di utilizzare svn:externals per agganciare appropriate tronco/tags/rami del vostro sottoprogetti al trunk appropriato/tag/ramo del progetto principale. In questo modo, il controllo di una variante di tuo genitore estrarrà la versione corretta degli altri progetti.

Questo ha senso solo se è ragionevole verificare tutti i progetti insieme.

+0

Sarebbe più utile commentare il mio approccio, piuttosto che solo in silenzio. Considerando che questo approccio ci ha aiutato a gestire diverse versioni specifiche del cliente negli ultimi quattro anni riducendo al minimo le differenze di codice, sarei interessato a sapere cosa ho fatto di sbagliato in tutto questo tempo. –

+1

Penso che svn: esternals è davvero intelligente, specialmente in grandi svn repository enterprise. In questo modo, è possibile associare un layout di directory Maven se necessario senza modificare l'intera struttura del repository. – Sylar

Problemi correlati