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 ?)
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.
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.
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.
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.
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