2013-03-20 14 views
11

ja spotkałem poniżej „wzór” dla maven relacji rodzic-dziecko: Relation ship examplehttp://yuml.me/3f8dd366Maven rodzic-dziecko relacja

W tym przykładzie mamy moduł z 2 modułów podrzędnych. Moduł ma macierzystą pompę "Parent do budowania modułu", która zna dwa podmoduły, jako swoje dzieci.

Podfoldery nigdy nie mają pojęcia, że ​​ten rodzic je zna, i uważają, że ich rodzicem jest ten, który ma nazwę "Parent dla zarządzania zależnościami". Która ma wspólne konfiguracje jak zarządzanie zależnościami, konfiguracji wtyczki wspólnych właściwości itp

Moje pytanie:
Czy to jest „dobry” wzór? Znaczenie ma wady/zalety, jak pozornie bardziej intuicyjny wzór dziecka < -> relacja rodzicielska

+0

gdzie znalazłeś ten wzór? Ciekawi mnie to podejście w moim zespole. Właściwie, myślę, że rodzic do budowania jest trochę dziwny, myślę, że każdy moduł powinien wiedzieć, jak zbudować siebie, a budowanie projektu powinno być kompozycją budowy każdego pojedynczego modułu, ale rozmawiać z bardziej doświadczonymi ludźmi i czytać źródło takie podejście może zmienić moje zdanie! – ThanksForAllTheFish

+0

Te strzałki wydają się naprawdę zagmatwane (wskazówki) i nie sądzę, że konsekwentnie używasz "rodzica". W rzeczywistości wiem, że ponieważ Maven nie obsługuje wielokrotnego dziedziczenia. Proszę wyjaśnić, co masz na myśli przez "rodzic". – djechlin

+0

@mardavi mamy go w wielu projektach w naszej firmie – RonK

Odpowiedz

9

Interesującą rzeczą, aby spojrzeć na to agregator pom.

To pom grupuje projekt według modułu, bez relacji "rodzic-dziecko". Agregator pom nie ma zarządzania zależnościami. Zarządza tylko kompilacją.

Posiadanie zarówno rodzica (-ów) pom i agregatora pom jest dość potężną cechą maven.

Możesz znaleźć więcej informacji here.

This maven page ma również cenny wgląd w sposób tworzenia pom dla złożonych projektów.

+0

W naszym zespole ustawiliśmy nasze poms w ten sposób. Odłączenie macierzystego POM i agregatora POM zapobiega na przykład konieczności aktualizacji nadrzędnego pom każdego modułu za każdym razem, gdy dodaje się nowy moduł w cyklu życia kompilacji. W naszym przypadku agregator POM jest tylko tutaj, aby łatwo skonfigurować kompilację (w Jenkins), konfigurując projekt wielomodułowy, a nie każdy moduł. – YMomb

+0

Dziękuję za wyjaśnienie, po przeczytaniu tych stron zdałem sobie sprawę, że moja terminologia była niepoprawna – RonK

+0

Bez problemu. Wydaje mi się, że pomieszanie pom-pom i agregatora jest dość powszechne. Niektórzy ludzie używają pom nadrzędnej, gdy agregator powinien być używany. – phoenix7360

0

To jest naprawdę dobrze mieć firmową konfigurację pom, która nie dba o swoje dzieci i zawiera rzeczy takie jak właściwości, dependecyManagement , repozytoria, pluginManagement itd. które z nich będzie dziedziczyć

może to może pomóc: Company wide parent pom

5

Hum ... Myślę, że nie zgadzam się z warunkami na twoim zdjęciu. Oto jak widzę to:

enter image description here

Taki sposób organizowania modułów może być mylące dla wielu developpers, ale jest to legalny sposób robienia rzeczy.

W każdym razie nie polecam tego podejścia, ponieważ jest mylące. Ale czasami ich nie ma alternatywy.

Podczas korzystania z tej konfiguracji?

Jeden (lub więcej) podmoduł ma już element nadrzędny (tj. Został opracowany w innym projekcie, ale trzeba go przebudować).Należy zauważyć, że zapis w projekcie wielomodułowego <module> jest względna ścieżka, dzięki czemu można mieć coś takiego:

<modules> 
    <module>../../somedir/othermodule</module> 
    ... 
</modules> 

Gdy jest to możliwe, polecam użyć wielomodułowego także jako rodzica ponieważ:

  • mniej kłopotliwe
  • czyste i czytelne <modules> i <parent> sekcje (nie trzeba używać brzydkich ścieżek względnych określić rodzica lub submodules)
  • możesz uporządkować swoje moduły w czystej strukturze hierarchicznej pod SCM (aby wtyczka maven-release była szczęśliwa) (Wiem, że zaćmienie nie lubi projektów hierarchicznych, ale to kolejny problem)
+0

Dziękuję, moja terminologia rzeczywiście się pomyliła. Czy mógłbyś rozwinąć, kiedy używałbyś tego rodzaju konfiguracji? Czy zaleca się ustawienie projektu wielomodułowego jako elementu nadrzędnego dla modułów? – RonK