553 Stimmen

Maven Module + Erstellung eines einzelnen spezifischen Moduls

Ich habe ein Multimodul-Maven-Projekt mit einem übergeordneten Projekt P und drei Untermodulen A , B y C . Beide B y C sind Kriegsprojekte und hängen beide von A .

Ich kann tippen mvn compile en P und alle Untermodule ordnungsgemäß kompiliert haben. Das Problem entsteht, wenn ich Operationen für bestimmte Module durchführen möchte.

Ich würde gerne einen Krieg für ein Projekt verpacken können B , aber wenn ich den Paketbefehl von B zu finden, beschwert es sich, dass es die Abhängigkeiten für A .

Ich verstehe diese Frage: Maven und abhängige Module dass Maven vielleicht nicht wirklich für diese Art von Abhängigkeitsauflösung ausgelegt ist, aber das wirft die Frage auf, wie ich ein Paket B ?

  1. Muss ich die mvn package für die gesamte Projekthierarchie, wenn ich eigentlich nur B ?

  2. Muss ich jedes Mal Snapshots von A in mein lokales Repository installieren, wenn ich ein Paket B ?

Dieses zweite Szenario ist nicht sehr lustig, wenn A befindet sich noch in der aktiven Entwicklung.

Gibt es hier bewährte Verfahren?

947voto

Pascal Thivent Punkte 548176

Gibt es hier bewährte Verfahren?

Verwenden Sie die Erweiterte Reaktoroptionen von Maven , genauer gesagt:

-pl, --projects
        Build specified reactor projects instead of all projects
-am, --also-make
        If project list is specified, also build projects required by the list

Also einfach cd in das übergeordnete Verzeichnis P und führen Sie es aus:

mvn install -pl B -am

Dadurch werden B und die von B benötigten Module erstellt.

Beachten Sie, dass Sie einen Doppelpunkt verwenden müssen, wenn Sie sich auf eine artifactId der sich vom Verzeichnisnamen unterscheidet:

mvn install -pl :B -am

Wie hier beschrieben:

88voto

Waqas Ahmed Punkte 1370

Angenommen, Parent pom.xml enthält 6 Module und Sie möchten A , B y F .

<modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
        <module>D</module>
        <module>E</module>
        <module>F</module>
  </modules>

1- cd in übergeordnetes Projekt

 mvn --projects A,B,F --also-make clean install

OR

mvn -pl A,B,F -am clean install

OR

mvn -pl A,B,F -amd clean install

Nota: Wenn Sie ein Projekt mit der Option -am Option, wird Maven alle Projekte bauen, von denen das angegebene Projekt (entweder direkt oder indirekt) abhängt. Maven wird die Liste der Projekte untersuchen und den Abhängigkeits-Baum durchgehen, um alle Projekte zu finden, die es bauen muss.

Während die -am alle Projekte, die für ein bestimmtes Projekt in einem Multimodul-Build erforderlich sind, mit dem Befehl -amd o --also-make-dependents Option konfiguriert Maven so, dass ein Projekt und jedes Projekt, das von diesem Projekt abhängt, gebaut wird. Bei Verwendung von --also-make-dependents Maven wird alle Projekte in unserem Reaktor untersuchen, um Projekte zu finden, die von einem bestimmten Projekt abhängen. Es wird automatisch diese Projekte bauen und nichts anderes.

15voto

victor hugo Punkte 34636

Maven wurde unbedingt für diese Art von Abhängigkeiten entwickelt.

mvn package installiert nichts in Ihr lokales Repository, sondern verpackt das Projekt und hinterlässt es im Zielordner.

Do mvn install im übergeordneten Projekt (A), damit werden alle Untermodule im Maven-Repository Ihres Computers installiert, wenn es keine Änderungen gibt, müssen Sie nur das Untermodul (B) kompilieren/packen und Maven wird die bereits gepackten und installierten Abhängigkeiten richtig übernehmen.

Sie müssen nur eine mvn install im übergeordneten Projekt, wenn Sie einen Teil des Codes aktualisiert haben.

12voto

Rich Seller Punkte 81404

Wenn Sie zuvor die Funktion mvn installieren auf Projekt B wird es in Ihr lokales Repository installiert, so dass Maven die Abhängigkeit auflösen kann, wenn Sie Paket A erstellen. Solange Sie also Projekt B jedes Mal installieren, wenn Sie es ändern, werden Ihre Builds für Projekt A auf dem neuesten Stand sein.

Sie können ein Multimodulprojekt mit einem Aggregator pom definieren, um eine Reihe von Projekten zu erstellen.

Es ist auch erwähnenswert m2eclipse Es integriert Maven in Eclipse und ermöglicht Ihnen (optional) die Auflösung von Abhängigkeiten aus dem Arbeitsbereich. Wenn Sie also an mehreren Projekten arbeiten, wird der Inhalt des Arbeitsbereichs für die Kompilierung verwendet. Wenn Sie mit Ihren Änderungen zufrieden sind, führen Sie mvn install aus (für jedes Projekt einzeln oder mit Hilfe eines Aggregators), um sie in Ihr lokales Repository zu übernehmen.

6voto

Zac Thompson Punkte 11833

Sie sagen, Sie wollen "eigentlich nur B", aber das ist falsch. Sie wollen B, aber Sie wollen auch ein aktualisiertes A, wenn es irgendwelche Änderungen daran gegeben hat ("aktive Entwicklung").

Manchmal möchten Sie also mit A, B und C arbeiten. Für diesen Fall haben Sie das Aggregatorprojekt P. Für den Fall, dass Sie mit A und B arbeiten möchten (aber nicht C) wünschen, sollten Sie das Aggregator-Projekt Q erstellen.

Bearbeiten 2016 : Die obigen Informationen waren vielleicht im Jahr 2009 relevant. Ab 2016 empfehle ich dringend, dies in den meisten Fällen zu ignorieren und einfach die -am o -pl Befehlszeilenflags wie in der akzeptierten Antwort beschrieben. Wenn Sie eine Version von Maven vor v2.1 verwenden, ändern Sie diese zuerst :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X