Maven multi module korzyści nad prostą zależnością

Mam kilka lat doświadczenia z projektami Mavena, nawet z modułami wielomodułowymi (co sprawiło, że nienawidzę funkcji Multi modules Mavena (więc wyłączenie odpowiedzialności jest teraz zrobione)) i nawet jeśli naprawdę lubię Mavena, jest coś, na co nie mogę uzyskać jasnej odpowiedzi: {]}

Co to jest typowe zastosowanie wielomodułowego projektu maven ? Jaka jest wartość dodana takiej struktury w porównaniu z prostymi zależnościami i nadrzędnym pom ?

Widziałem wiele konfiguracji projektów wielomodułowych, ale wszystkie z nich mogły być wyraźnie rozwiązane poprzez stworzenie prostej struktury biblioteki zależności, żyjącej własnym życiem jako rezultaty (nawet z nadrzędnym pom , jako oddzielnym dostarczaniem: Faktoryzacja depedencies i konfiguracja) i nie znalazłem żadnego zastosowania, w którym wyraźnie widzę wartość dodaną struktury wielomodułowej.

Zawsze uważałem, że tego rodzaju struktura przynosi nadmierną złożoność bez realnych korzyści : gdzie coś przeoczyłem ? (szczerze mówiąc, mogę się przekonać, że niektórzy ear mogą korzystać z tego rodzaju struktury, ale poza tym konkretnym zastosowaniem, jakieś inne rzeczywiste wykorzystanie i korzyści ?)

Author: Jonas, 2013-03-21

4 answers

Oto prawdziwa sprawa.

Mam projekt wielomodułowy (i do twojej wypowiedzi... Nie widziałem żadnych komplikacji.) Efektem końcowym jest webapp, ale mam różne moduły dla api, impl i webapp.

12 miesięcy po stworzeniu projektu okazało się, że muszę zintegrować z Amazon S3 za pomocą autonomicznego procesu uruchomionego z jar. Dodaję nowy moduł, który zależy od api / impl i piszę mój kod do integracji w nowym module. Używam wtyczki assembly (lub coś w tym stylu) aby stworzyć jar runnable i teraz mam wojnę, którą mogę wdrożyć w tomcacie i proces, który mogę wdrożyć na innym serwerze. Nie mam klas internetowych w moim procesie integracji S3 i nie mam zależności Amazon w mojej webapp, ale mogę udostępnić wszystkie rzeczy w api i impl.

3 miesiące po tym decydujemy się stworzyć REST webapp. Chcemy to zrobić jako oddzielną aplikację, a nie tylko nowe mapowania URL w istniejącej aplikacji webapp. Proste. Jeszcze jeden moduł, kolejny webapp stworzony jako wynik budowy Mavena bez specjalnego majsterkowania. Logika biznesowa jest łatwo udostępniane między webapp i rest-webapp i mogę wdrożyć je w razie potrzeby.

 32
Author: digitaljoel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 22:39:00

Głównymi zaletami wielu modułów są

  • jedno polecenie Mavena do budowania wszystkich modułów naraz.
  • i najważniejsze : maven zajmie siÄ™ zleceniem budowy dla Ciebie.
  • Konfiguracja serwera CI jest również bardzo Å‚atwa: jedno zadanie Jenkinsa do zbudowania wszystkiego.

Pracowałem już w projekcie z około 30 podmodułami. Czasami trzeba coś zmienić w czymś więcej niż module, i uruchomić jedną komendę i mieć pewność, że wszystko że trzeba skompilować jest skompilowany w odpowiedniej kolejności jest koniecznością.

EDIT

Dlaczego 30 podmodułów ?

Ogromny framework z funkcjami lot ' A a, mnóstwem programistów, oddzieleniem funkcji na bazie modułów. To prawdziwy przypadek użycia, a rozdzielenie kodu na moduł było naprawdę znaczące.

 17
Author: ben75,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 23:01:17

Myślę, że masz rację w tym większości projektów, które używają wielu modułów, właściwie ich nie potrzebują.

W mojej pracy korzystamy z projektów wielomodułowych (i myślę, że nie bez powodu). Mamy coś podobnego do architektury zorientowanej na usługi, więc każda aplikacja

  • ModuÅ‚ klienta
  • ModuÅ‚ interfejsu (który posiada obiekty współdzielone miÄ™dzy Klientem a implementacjÄ…)
  • ModuÅ‚ wdrożeniowy
  • ModuÅ‚ wojenny

Zgadzam się, że umieszczenie tej implementacji i modułu wojny w tym samym module byłoby ok, ale (prawdopodobnie) zaletą tego jest to, że jest bardzo wyraźny podział między klasami, które rozwiązują problem i jak aplikacja komunikuje się ze światem zewnętrznym.

W poprzednich projektach, które dotyczyły tylko aplikacji webowej, starałem się umieścić wszystko w tym samym module, ponieważ ułatwiło to testowanie, biorąc pod uwagę moduły, których używałem.

 4
Author: Augusto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 22:08:39

Wiele modułów może pomóc w ponownym użyciu kodu. To jedna z najlepszych korzyści, jakie poczujesz w pracy.

Wyobraź sobie, że masz 3 projekty internetowe z warstwą bezpieczeństwa, będziesz musiał skopiować wklej kod 3 razy i spróbować połączyć go z każdym projektem.

Ale co jeśli stworzysz moduł bezpieczeństwa Projekt z określonym zadaniem. Będzie łatwo go używać, wstrzykując go do aplikacji, a następnie boom to działa.

Również jak wspomniano w odpowiedzi @ ben75 na polecenie one Maven build i prawidłową kolejność budowania wszystkich używanych słoików. Nie będziesz już myśleć o tym, co zależy od innego.

 1
Author: Waleed Emad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-30 22:02:39