2010-12-14 19 views
12

Mam obecnie około 16 projektów, które buduję z mavenem, które zostaną wdrożone na tym samym serwerze aplikacji, które tworzą coś w rodzaju "portalu". Zbudowałem macierzystą pompę pom w celu obsługi typowych zależności i konfiguracji wtyczek. Obecnie moja struktura SVN wygląda podobnie:Projekt wielu modułów maven z nadrzędnym układem pom i svn

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

Poszczególne projekty są wdrażane osobno. Oznacza to, że projekt1 nie ma zależności od projektu2, a każdy z nich można modyfikować i wdrażać bez konieczności modyfikowania czegokolwiek innego.

To przedstawia problem z SVN, tak jakby inny programista chciał sprawdzić cały katalog "portalu" (aby uzyskać także główną czcionkę), domyślnie usuwałby kopie wszystkich tagów i gałęzi! Niezupełnie idealny.

Jedyne co mogę myśleć jest użycie coś takiego:

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

Jednak teraz wszystkie zmiany w projekcie będą śledzone w folderze tagi. Nie jest to dla mnie ogromny problem, ale rozgałęzianie wydaje się teraz być bólem.

Obecnie pracuję nad podłączeniem do tego Teamcity, co byłoby teraz nieco łatwiejsze, ponieważ musiałbym oglądać tylko jeden katalog (np. Tagi), aby wychwycić wszystko, co musi zostać zbudowane. Wdrażam też artefakty do korporacyjnego repozytorium Nessus.

Mam nadzieję, że ktoś może dać mi kilka sugestii tutaj, ponieważ nie byłem w stanie znaleźć żadnej przyzwoitej dokumentacji, która mówi o całym cyklu życia i najlepszych praktykach tutaj.

Podoba mi się pomysł, aby móc budować i wdrażać wszystkie projekty za pomocą jednego polecenia maven. Lubię też mieć wszystkie wspólne zależności, informacje o repozytoriach i informacje o wtyczkach w jednym miejscu.

Odpowiedz

25

Można użyć następujący układ:

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

W projekcie rodzic pom dodatku:

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

u dzieci projekty pom dodać:

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

Dzieci Projekty mogą być ewentualnie zależne.

Poniższe linki mogą pomóc również:

+0

To doskonale rozwiązało mój problem! Dzięki! – Casey

+0

Pamiętaj, aby dodać dane macierzyste jako zależność, jeśli chcesz użyć projektu nadrzędnego w podrzędnym. – cevaris

4

wariacja na podejściu Johns byłoby użyć svn:externals aby podłączyć odpowiednie trunk/tags/oddziałów firmy podprojektów do odpowiedni bagażnik/tag/gałąź twojego projektu nadrzędnego. W ten sposób sprawdzenie jednego wariantu rodzica spowoduje wyciągnięcie wszystkich poprawnych wersji innych projektów.

Ma to sens tylko wtedy, gdy opłaca się zrealizować wszystkie projekty razem.

+0

Bardziej użyteczne byłoby komentowanie mojego podejścia, niż po prostu bezgłośnie głosować. Biorąc pod uwagę fakt, że to podejście pomaga nam w obsłudze kilku wersji specyficznych dla klienta przez ostatnie cztery lata przy jednoczesnej minimalizacji różnic w kodowaniu, chciałbym wiedzieć, co robię źle przez cały ten czas. –

+1

Myślę, że svn: externals jest naprawdę sprytny, szczególnie w dużych firmach. W ten sposób możesz w razie potrzeby powiązać layout katalogu, bez zmiany całej struktury repo. – Sylar

Powiązane problemy