Ich habe ein Multi-Modul Maven Projekt mit einem übergeordneten Projekt P
und drei Teilmodulen A
, B
und C
. Beide B
und C
sind Kriegsprojekte und beide hängen davon ab A
.
Ich kann geben mvn compile
in P
richtig kompiliert alle der Untermodule und haben. Das Problem tritt auf, wenn ich Operationen für bestimmte Module ausführen möchte.
Ich möchte einen Krieg für ein Projekt packen können B
, aber wenn ich den Befehl package aus B
dem Verzeichnis ausführe , wird beanstandet, dass die Abhängigkeiten für nicht gefunden werden können A
.
Ich verstehe aus dieser Frage: Maven und abhängige Module, dass Maven vielleicht nicht wirklich für diese Art der Abhängigkeitsauflösung ausgelegt ist, aber das wirft die Frage auf, wie ich verpacke B
?
Muss ich
mvn package
für die gesamte Projekthierarchie laufen, wenn ich wirklich nur willB
?Muss ich jedes Mal, wenn ich packen möchte, Snapshots von A in meinem lokalen Repository installieren
B
?
Dieses zweite Szenario macht nicht viel Spaß, wenn A
es sich noch in der aktiven Entwicklung befindet.
Irgendwelche Best Practices hier?
quelle
Antworten:
Verwenden Sie die Maven fortgeschrittener Reaktor Optionen , genauer gesagt:
Also einfach
cd
in das übergeordnete P-Verzeichnis und ausführen:Und dies wird B und die von B benötigten Module bauen.
Beachten Sie, dass Sie einen Doppelpunkt verwenden müssen, wenn Sie auf einen Doppelpunkt verweisen,
artifactId
der vom Verzeichnisnamen abweicht:Wie hier beschrieben: https://stackoverflow.com/a/26439938/480894
quelle
mvn install -pl .,parent/child,parent/child/grandchild
Sie Komma verwenden, um mehrere Projekte zu trennen und. für Eltern pomclean package
diese Weise versuche, ein Modul zu erstellen, können Reaktorabhängigkeiten, die noch nicht installiert sind, nicht aufgelöst werden. Damit-am
werden die Deps unnötig neu aufgebaut.Angenommen, die übergeordnete Datei pom.xml enthält 6 Module und Sie möchten A , B und F ausführen .
1- CD in übergeordnetes Projekt
ODER
ODER
Hinweis: Wenn Sie ein Projekt mit der Option -am angeben , erstellt Maven alle Projekte, von denen das angegebene Projekt abhängt (entweder direkt oder indirekt). Maven überprüft die Liste der Projekte und geht den Abhängigkeitsbaum entlang, um alle Projekte zu finden, die erstellt werden müssen.
Während der Befehl -am alle Projekte erstellt, die für ein bestimmtes Projekt in einem Build mit mehreren Modulen erforderlich sind, konfiguriert die Option -amd oder --also-make-abhängige Elemente Maven so, dass ein Projekt und jedes Projekt erstellt wird, das von diesem Projekt abhängt. Bei Verwendung von --also-make-abhängigen Elementen untersucht Maven alle Projekte in unserem Reaktor, um Projekte zu finden, die von einem bestimmten Projekt abhängen. Diese Projekte werden automatisch erstellt und sonst nichts.
quelle
Maven wurde absolut für diese Art von Abhängigkeit entwickelt.
mvn package
installiert nichts in Ihrem lokalen Repository, sondern packt nur das Projekt und belässt es im Zielordner.Führen Sie
mvn install
im übergeordneten Projekt (A) alle Submodule im Maven-Repository Ihres Computers aus. Wenn keine Änderungen vorgenommen wurden, müssen Sie nur das Submodul (B) kompilieren / verpacken, und Maven übernimmt das bereits verpackte Modul und installierte Abhängigkeiten genau richtig.Sie müssen nur ein
mvn install
im übergeordneten Projekt, wenn Sie einen Teil des Codes aktualisiert haben.quelle
Wenn Sie zuvor mvn install für Projekt B ausgeführt haben, wurde es in Ihrem lokalen Repository installiert. Wenn Sie also Paket A erstellen, kann Maven die Abhängigkeit auflösen. Solange Sie Projekt B bei jeder Änderung installieren, sind Ihre Builds für Projekt A auf dem neuesten Stand.
Sie können ein Projekt mit mehreren Modulen mit einem Aggregator-POM definieren, um eine Reihe von Projekten zu erstellen.
Erwähnenswert ist auch m2eclipse . Es integriert Maven in Eclipse und ermöglicht es Ihnen, (optional) Abhängigkeiten vom Arbeitsbereich aufzulösen. Wenn Sie also mehrere Projekte abhacken, wird der Arbeitsbereichsinhalt für die Kompilierung verwendet. Wenn Sie mit Ihren Änderungen zufrieden sind, führen Sie mvn install aus (für jedes Projekt nacheinander oder mithilfe eines Aggregators), um sie in Ihrem lokalen Repository abzulegen.
quelle
Schauen Sie sich meine Antwort Maven und abhängige Module an .
Das Maven Reactor-Plugin wurde entwickelt, um einen Teil eines Projekts zu erstellen.
Das besondere Ziel, das Sie verwenden möchten
reactor:make
.quelle
Sie sagen, Sie "wollen wirklich nur B", aber das ist falsch. Sie möchten B, aber Sie möchten auch ein aktualisiertes A, wenn Änderungen daran vorgenommen wurden ("aktive Entwicklung").
Manchmal möchten Sie also mit A, B und C arbeiten. In diesem Fall haben Sie das Aggregatorprojekt P. Für den Fall, dass Sie mit A und B arbeiten möchten (aber nicht C möchten), sollten Sie das Aggregatorprojekt Q erstellen .
Bearbeiten 2016 : Die oben genannten Informationen waren möglicherweise 2009 relevant. Ab 2016 empfehle ich dringend, dies in den meisten Fällen zu ignorieren und einfach die Befehlszeilenflags
-am
oder zu-pl
verwenden, wie in der akzeptierten Antwort beschrieben. Wenn Sie eine Version von maven vor Version 2.1 verwenden, ändern Sie diese zuerst :)quelle