Multi-Modul-Projekt mit Maven

Multi-Modul-Projekt mit Maven

1. Überblick

In diesem Tutorial zeigen wir, wie Sie mit Maven ein Projekt mit mehreren Modulen erstellen.

Zunächst werden wir diskutieren, was ein Projekt mit mehreren Modulen ist, und die Vorteile dieses Ansatzes untersuchen. Dann richten wir unser Beispielprojekt ein. Eine gute Einführung in Maven finden Sie unterthis tutorial.

2. Mavens Multi-Modul-Projekt

Ein Projekt mit mehreren Modulen wird aus einem Aggregator-POM erstellt, der eine Gruppe von Submodulen verwaltet. In den meisten Fällen befindet sich der Aggregator im Stammverzeichnis des Projekts und muss über eine Verpackung vom Typpomverfügen.

Die Submodule sind nun reguläre Maven-Projekte und können separat oder über das Aggregator-POM erstellt werden.

Wenn Sie das Projekt über den Aggregator POM erstellen, führt jedes Projekt mit einem anderen Verpackungstyp alspomzu einer erstellten Archivdatei.

3. Vorteile der Verwendung von Multi-Modulen

Der wesentliche Vorteil dieses Ansatzes besteht darin, dasswe may reduce duplication.

Nehmen wir an, wir haben eine Anwendung, die aus mehreren Modulen besteht. Es handelt sich um ein Front-End-Modul und ein Back-End-Modul. Jetzt arbeiten wir an beiden und ändern die Funktionalität, die sich auf beide auswirkt. In diesem Fall müssen wir ohne ein spezielles Build-Tool beide Komponenten separat erstellen oder ein Skript schreiben, das den Code kompiliert, Tests ausführt und die Ergebnisse anzeigt. Wenn wir dann noch mehr Module im Projekt haben, wird es schwieriger, diese zu verwalten und zu warten.

Außerdem brauchen Projekte in der realen Welt möglicherweise bestimmte Maven-Plugins, um verschiedene Operationen währendbuild lifecycle auszuführen, Abhängigkeiten und Profile gemeinsam zu nutzen oder andereBOM projects einzuschließen.

Wenn wir also mehrere Module nutzen, können wirbuild our application’s modules in a single command und wenn die Reihenfolge wichtig ist, wird Maven dies für uns herausfinden. Wir können auchshare a vast amount of configuration with other modules.

4. Eltern-POM

Maven unterstützt die Vererbung auf eine Weise, dieeach pom.xml file has the implicit parent POM, it’s called Super POM beträgt und sich in den Maven-Binärdateien befindet. Diese beiden Dateien werden von Maven zusammengeführt und bilden das effektive POM.

Daher können wir unsereown pom.xml file which will serve us as the parent project erstellen. Dann können wir dort alle Konfigurationen mit Abhängigkeiten einschließen und diese als übergeordnetes Element unserer untergeordneten Module festlegen, damit sie davon erben.

Neben der Vererbung liefert Maven den Begriff der Aggregation. Übergeordnetes POM, das diese Funktionalität nutzt, wird als aggregiertes POM.bezeichnet. Grundsätzlich wird diese Art von POMdeclares its modules explicitly in its pom.xml file.verwendet

5. Submodule

Submodule oder Subprojekte sind reguläre Maven-Projekte, die vom übergeordneten POM erben. Wie wir bereits wissen, können wir durch Vererbung die Konfiguration und Abhängigkeiten mit Submodulen teilen. Wenn wir unser Projekt jedoch auf einmal erstellen oder veröffentlichen möchten, müssen wir unsere Submodule explizit im übergeordneten POM deklarieren. Letztendlich wird unser übergeordneter POM sowohl der übergeordnete als auch der aggregierte POM sein.

6. Erstellen der Anwendung

Nachdem wir die Submodule und Hierarchien von Maven verstanden haben, erstellen wir eine Beispielanwendung, um sie zu demonstrieren. Wir werden die Befehlszeilenschnittstelle von Maven verwenden, um unsere Projekte zu generieren.

Diese App wird aus drei Modulen bestehen, die Folgendes darstellen:

  • Dascore part unserer Domain

  • Ein Webservice , das einige REST-APIs enthält

  • Awebapp enthält benutzerbezogene Web-Assets

Da wir uns auf Maven konzentrieren, bleibt die Implementierung dieser Dienste undefiniert.

6.1. Generieren des übergeordneten POM

First, let’s create a parent project:

mvn archetype:generate -DgroupId=org.example -DartifactId=parent-project

Sobald das übergeordnete Element generiert wurde, müssen wir die Dateipom.xmlim Verzeichnis des übergeordneten Elements öffnen und die Verpackung in pom ändern.

pom

Wenn Sie die Verpackung auf den POM-Typ setzen, erklären wir, dass das Projekt als übergeordnetes Element oder Aggregator fungiert - es werden keine weiteren Artefakte erzeugt.

Nun, da unser Aggregator fertig ist, können wir unsere Submodule generieren.

Es ist jedoch zu beachten, dass sich hier die gesamte Konfiguration befindet, die gemeinsam genutzt und schließlich in untergeordneten Modulen wiederverwendet werden soll. Unter anderem können wir hierdependencyManagement oderpluginManagement verwenden.

6.2. Submodule erstellen

Da unser übergeordnetes POMparent-project heißt, müssen wir sicherstellen, dass wir uns im Verzeichnis des übergeordneten POM befinden, und die Befehle vongenerateausführen:

cd parent-project
mvn archetype:generate -DgroupId=org.example  -DartifactId=core
mvn archetype:generate -DgroupId=org.example  -DartifactId=service
mvn archetype:generate -DgroupId=org.example  -DartifactId=webapp

Beachten Sie den verwendeten Befehl. Es ist dasselbe, was wir für die Eltern verwendet haben. Die Sache hier ist, dass diese Module reguläre Maven-Projekte sind, Maven jedoch erkannt hat, dass sie verschachtelt sind. Als wir das Verzeichnis inparent-project geändert haben, haben wir festgestellt, dass das übergeordnete Verzeichnis eine Verpackung vom Typpom hat, und beidepom.xml -Dateien entsprechend geändert.

Danach generiert Maven drei Submodule und ändert für uns diepom.xml-Datei des Elternteils, indem einige Tags hinzugefügt werden:


    core
    service
    webapp

Jetzt deklariert unser Elternteil explizit aggregierte Module.

Wenn Sie den Befehlmvn package im übergeordneten Projektverzeichnis ausführen, erstellt und testet Maven alle drei Module.

Darüber hinaus wird Maven Reactor unser Projekt analysieren und in der richtigen Reihenfolge aufbauen. Wenn also unserwebapp-Modul vomthe service-Modul abhängt, erstellt Maven zuerst dieservice und dann diewebapp.

Wenn wir die gesamte Konfiguration mit unseren Submodulen in ihrenpom.xml-Dateien teilen möchten, müssen wir das übergeordnete Element deklarieren:


    org.example
    parent-project
    1.0-SNAPSHOT

Wir müssen beachten, dass Submodule nur einen Elternteil haben können. Wir können jedoch viele Stücklisten importieren. Weitere Details zu den Stücklistendateien finden Sie inthis article.

6.3. Das Projekt aufbauen

Now we can build all three modules at once. Führen Sie im Projektverzeichnis des übergeordneten Elements Folgendes aus:

mvn package

Dadurch werden alle Module erstellt. Wir sollten die folgende Ausgabe des Befehls sehen:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] parent-project
[INFO] core
[INFO] service
[INFO] webapp
...
[INFO] Reactor Summary:
[INFO] parent-project ..................................... SUCCESS [  0.140 s]
[INFO] core ............................................... SUCCESS [  2.195 s]
[INFO] service ............................................ SUCCESS [  0.767 s]
[INFO] webapp ............................................. SUCCESS [  0.572 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Der Reaktor listet dieparent-project auf, aber da es sich um denpom-Typ handelt, ist er ausgeschlossen und der Build führt zu drei separaten.jar-Dateien für alle anderen Module. In diesem Fall wird der Build in drei Fällen ausgeführt.

7. Fazit

In diesem Tutorial haben wir die Vorteile der Verwendung von Maven-Multimodulen besprochen. Außerdem haben wir zwischen dem übergeordneten POM des regulären Maven und dem aggregierten POM unterschieden. Am Ende zeigten wir, wie man ein einfaches Multi-Modul aufbaut, um damit zu beginnen.

Maven ist ein großartiges Tool, aber es ist für sich genommen komplex. Wenn Sie weitere Informationen zu Maven wünschen, sehen Sie sich dieSonatype Maven reference oderApache Maven guides an. Wenn Sie eine erweiterte Verwendung der eingerichteten Maven-Multimodule suchen, schauen Sie sichhow Spring Boot project leverages the usage of it an.

Alle Codebeispiele in diesem Beispiel wurden mit Maven erstellt, sodass Sie unsereGitHub project website leicht überprüfen können, um verschiedene Maven-Konfigurationen anzuzeigen.