Top 5 ekscytujących pomysłów i tematów na projekty wielomodułowe Maven dla początkujących [2022]

Opublikowany: 2021-05-27

Ponieważ każdy projekt staje się bardziej złożony i wielowarstwowy, prawidłowym sposobem zarządzania nim jest podzielenie go na różne moduły. W Maven, chociaż możliwe jest łączenie tych wielu projektów jako zależności, sprawia to, że proces kompilacji jest znacznie bardziej złożony. Dlatego preferowanym podejściem jest skonstruowanie projektu jako wielomodułowego i przekazanie reszty Mavenowi.

Spis treści

Korzyści z używania wielu modułów w Maven

Istotną zaletą korzystania z wielu modułów zamiast wstrzykiwania zależności lub jakiejkolwiek innej procedury jest to, że zmniejsza to duplikację. Aby lepiej to zrozumieć, załóżmy, że pracujesz nad aplikacją, która składa się z dwóch modułów — powiedzmy modułu zaplecza i modułu frontendu.

Jeśli pracujesz nad obydwoma tymi modułami i zmieniasz pewne funkcje, które wpływają na oba moduły, będziesz musiał zbudować oba moduły lub komponenty oddzielnie, bez specjalistycznego narzędzia do budowania. Lub musisz napisać skrypt, aby skompilować kod, uruchomić testy i wyświetlić wyniki końcowe.

Teraz, jeśli złożoność wzrośnie jeszcze bardziej, a Twój projekt ma więcej niż dwa moduły, wykonanie tego zadania bez specjalistycznego narzędzia do budowania będzie coraz trudniejsze. Co więcej, w rzeczywistych problemach Twoje projekty mogą wymagać niektórych wtyczek Maven do wykonywania niektórych kluczowych operacji podczas całego cyklu życia kompilacji, współdzielenia zależności lub dołączania innych projektów BOM.

W wyniku tych wyzwań wielomoduły w Maven są niezwykle pomocne i pozwalają budować moduły aplikacji w jednym wierszu poleceń. Umożliwia także bezproblemowe udostępnianie ogromnej ilości danych i konfiguracji między wieloma modułami.

Przeczytaj także: Odpowiedź na pytanie z wywiadu z Maven

Kluczowe terminy, które należy znać w odniesieniu do projektów wielomodułowych w Maven

1. Nadrzędny POM (Moduł Obiektów Projektu)

Każdy plik pom.xml w Maven – dla wsparcia dziedziczenia – ma nadrzędny POM, znany jako Super POM. Można go znaleźć w plikach binarnych Mavena, a także połączyć oba pliki, aby utworzyć efektywny POM.

Możesz więc stworzyć swój własny plik pom.xml, który będzie służył jako nadrzędny dla twojego projektu. Gdy to zrobisz, możesz dodać wszystkie zależności i konfigurację, ustawić go jako rodzica modułów podrzędnych i włączyć dziedziczenie. Oprócz dziedziczenia Maven zapewnia również agregację. Nadrzędny POM, który wykorzystuje funkcję agregacji, jest znany jako zagregowany POM — ten rodzaj POM deklaruje moduły podrzędne w pliku pom.xml.

2. Moduły podrzędne

Podprojekty, znane również jako podmoduły, można rozumieć jako standardowe moduły Maven, które dziedziczą po nadrzędnym POM. Korzystając z dziedziczenia, moduły współdzielą różne zależności i konfiguracje. Jeśli jednak potrzebujesz szybko zbudować projekt, musisz jawnie zadeklarować podmoduły w nadrzędnym POM, czyniąc go zbiorczym POM.

3. Prosty projekt wielomodułowy

App i util to dwa moduły zawarte w The Simple Multi-Module Project. Moduł util jest wymagany do zapewnienia statycznej metody łączenia lub dołączania różnych ciągów za pomocą biblioteki Apache Commons Lang, a moduł app jest niezbędny do wywołania modułu util. Oto fragment z pliku app.java:

simple-multi/app/src/main/java/app/App.java

Aplikacja klasy publicznej {

public static void main(String[] args) {

System.out.println(nowa App().greet("Świat!"));

}

public String pozdrawiam(String name) {

return Util.join("Cześć", imię);

}

}

Aby zbudować projekt, uruchom

$ cd simple-multi

$ mvn czysty test

Kreator kodu Mavena buduje oba moduły projektu we właściwej kolejności, wykonuje niezbędne testy i wyświetla wyniki w łatwo zrozumiałym formacie podsumowania, jak poniżej:

4. Struktura projektu wielomodułowego

Oto układ prostego projektu wielomodułowego:

Katalog simple-multi jest katalogiem głównym i znajduje się na samej górze całego projektu. Zawiera on POM najwyższego poziomu (nadrzędny POM), ale ten nadrzędny POM nie ma żadnego folderu źródłowego.

Katalog najwyższego poziomu zawiera również app i util, które są zwykłymi projektami Maven z katalogami i plikiem pom.xml.

POM najwyższego poziomu i moduł POM różnią się nieco od zwykłego POM. Przyjrzyjmy się szczegółowo, co zawierają:

5. POM najwyższego poziomu

Nadrzędny POM lub POM najwyższego poziomu jest wymagany przez Maven Multi-Module Project w katalogu głównym.

POM najwyższego poziomu definiuje ważne aspekty i współrzędne projektu, takie jak artifactID, version i groupID, tak jak w każdym normalnym projekcie. Jednak rodzaj opakowania do tego nie jest zwykłym formatem wojennym lub słoika, ale jako pom. Dzieje się tak, ponieważ moduł najwyższego poziomu nie zawiera żadnego dalszego katalogu źródłowego. Elementy modułów/modułów dodają moduły aplikacji i narzędzia.

Zawartość tego pliku obejmuje:

simple-multi/pom.xml

<projekt xmlns=”http://maven.apache.org/POM/4.0.0″xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

<modelVersion>4.0.0</modelVersion>

<groupId>org.codetab</groupId>

<artifactId>simple-multi</artifactId>

<wersja>1.0</wersja>

<packaging>pom</packaging>

<moduły>

<module>aplikacja</module>

<module>util</module>

</modules>

</projekt>

Podsumowując, POM najwyższego poziomu określa typ opakowania pom i wyraźnie wymienia wszystkie podmoduły.

Pamiętaj, że nie musisz martwić się o kolejność podczas deklarowania podmodułów w nadrzędnym POM, ponieważ Maven używa Reaktora do prawidłowego zamawiania wymienionych modułów. W simple-multi maven buduje moduł util, a następnie aplikację, ponieważ aplikacja zależy od narzędzia.

5. Moduł POM

Folder Module POM zawiera zwykły folder źródłowy i własny plik pom.xml. Zawartość tego pliku util/pom.xml to:

util/pom.xml

<projekt xmlns=”http://maven.apache.org/POM/4.0.0″xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

<modelVersion>4.0.0</modelVersion>

<rodzic>

<groupId>org.codetab</groupId>

<artifactId>simple-multi</artifactId>

<wersja>1.0</wersja>

</parent>

<artifactId>util</artifactId>

<właściwości>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</properties>

<zależności>

<zależność>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<wersja>3.6</wersja>

</zależność>

<zależność>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<wersja>4.12</wersja>

<scope>test</scope>

</zależność>

</dependencies>

</projekt>

Nie ma potrzeby określania groupID i wersji modułu, ponieważ zostaną one odziedziczone po rodzicu. Blok zależności/zależności definiuje zależności modułu util – commons-lang3 i JUnit.

Teraz spójrzmy na app/pom.xml, który jest dość podobny do util/pom.xml, z wyjątkiem bloku zależności, który pokazano poniżej:

aplikacja/pom.xml

….

<zależności>

<zależność>

<groupId>org.codetab</groupId>

<artifactId>util</artifactId>

<wersja>1.0</wersja>

</zależność>

….

</dependencies>

Moduł app używa metod z modułu util, a w tym celu app/pom.xml określa util jako zależność.

Podsumowując wszystkie rzeczy wyjaśnione powyżej:

Projekt najwyższego poziomu (projekt nadrzędny),

  • Definiuje pom.xml najwyższego poziomu, który określa wszystkie współrzędne i moduły podrzędne, oraz ustawia typ opakowania jako pom.
  • Zawiera kolejne foldery modułów.
  • Nie zawiera folderów źródłowych.

Każdy z folderów modułów to nic innego jak zwykłe katalogi projektu Maven. Jednak plik pom.xml zawiera:

  • Element parent określa rodzica modułu.
  • Współrzędne modułu są określone w elemencie artifactID. GroupID i wersja nie są wymienione, ponieważ są dziedziczone ze współrzędnych rodzica.
  • Zależność, jeśli jeden moduł jest zależny od drugiego, jest wymieniona w elemencie zależności/zależność.

Realizacja projektu wielomodułowego

Polecenie $ mvn clean package może być użyte do kompilacji, testowania i pakowania wielomodułowego. Jednak uruchomienie go za pomocą wtyczki maven-exec wymaga następujących kroków:

Uruchom następujące polecenia:

$ cd simple-multi

$ mvn czysta instalacja

$ mvn exec:java -pl app -Dexec.mainClass=app.App

Polecenie install instaluje moduły w lokalnym repozytorium, w którym możesz uruchomić projekt. Opcja -pl app informuje wtyczkę exec o module app i uruchamia jego klasę app.App. Bez instalacji proces kompilacji kończy się niepowodzeniem, ponieważ Maven nie może pobrać i rozwiązać zależności modułu util.

Jednak dość kłopotliwe jest instalowanie projektu w lokalnym repozytorium za każdym razem przed każdym uruchomieniem, zwłaszcza w fazie rozwoju. Aby to ułatwić, możesz bezpośrednio uruchomić wielomoduł w środowisku Eclipse IDE bez wykonywania kroku instalacji.

Ucz się kursów rozwoju oprogramowania online z najlepszych uniwersytetów na świecie. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Wniosek

Mamy nadzieję, że ten artykuł pomógł ci w rozpoczęciu procesu wielomodułowego Maven. Jak w przypadku wszystkiego, co nowe, chodzi tylko o to, by zacząć to ćwiczyć. Gdy zrozumiesz podstawową strukturę i działanie, będziesz na dobrej drodze do bezproblemowego zarządzania wieloma modułami w Maven.

Jeśli chcesz dowiedzieć się więcej o tworzeniu oprogramowania z pełnym stosem, sprawdź program Executive PG UpGrad i IIIT-B w tworzeniu oprogramowania – specjalizacja w tworzeniu pełnego stosu, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznego szkolenia, 9 + projekty i zadania, status absolwentów IIIT-B, praktyczne praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.

Czym są projekty wielomodułowe?

Wiele modułów umożliwia grupowanie wspólnych artefaktów w jeden moduł w celu zmniejszenia liczby modułów potrzebnych do zbudowania i wdrożenia projektu. Projekty wielomodułowe można konstruować z dwóch lub więcej modułów, definiując relację nadrzędny-podrzędny między tymi modułami. Moduł nadrzędny projektu wielomodułowego nazywa się modułem głównym. Moduł potomny projektu wielomodułowego nazywa się submodułem. Moduł główny jest podstawą budowania wielomodułowego. Moduły potomne nie mogą być budowane samodzielnie, muszą być budowane razem z modułem głównym.

Co to jest plik modelu obiektu projektu w maven?

Plik modelu obiektu projektu (POM) to plik opisujący projekt. Jest to podstawowa jednostka pracy, za pomocą której programiści publikują artefakty w repozytorium. Model obiektu projektu to prosty plik tekstowy, który definiuje projekt, zawiera listę jego komponentów i definiuje ich działanie. Model obiektów projektu jest kluczowym elementem struktury zarządzania projektami oprogramowania Maven. Jest to specjalny typ dokumentu XML, z którego składa się projekt Maven. Plik pom można traktować jako opis projektu. Mówi Mavenowi, o czym jest projekt, a także opisuje każdy z modułów w projekcie, ich zależności i wersje. Moduły to elementy składowe projektu Maven. Moduły i ich zależności służą do zbudowania ostatecznego projektu.

Jak stworzyć maven wielomodułowy projekt?

Aby stworzyć projekt wielomodułowy typu maven, musisz zdefiniować pom nadrzędny i upewnić się, że wszystkie moduły podrzędne go odziedziczą. Ważne jest również, aby pamiętać, że możesz również umieścić wszystkie podmoduły w jednym repozytorium i skierować do niego nadrzędny pom. Projekt wielomodułowy maven składa się z nadrzędnego pom i co najmniej jednego podmodułu. Pom nadrzędny może definiować metadane projektu maven z wieloma modułami, takie jak identyfikator artefaktu, wersja, opakowanie i zależności. Moduły podrzędne mogą dziedziczyć metadane rodzica, a nadrzędny pom może definiować konfigurację projektu wysokiego poziomu, taką jak organizacja i opis projektu.