2010-12-07 6 views
1

Ich habe ein Maven-Projekt mit mehreren Modulen, wobei Modul B von Modul A abhängt. Wie bekomme ich Modul A, das neu aufgebaut werden soll, wenn ich Modul B neu bilde? Gerade jetzt muss ich Modul A manuell installieren, bevor ich etwas mit Modul B mache, und es ist ein echter Schmerz.Änderungen im Multi-Modul Maven-Projekt übernehmen

P.S. Ich sehe, dass jemand anders eine ähnliche unbeantwortete Frage gestellt hat: Maven: How to use jetty:run in a multi-module Maven project, without needing to install

+0

Welche Befehle führen Sie aus, um Ihr Projekt zu erstellen? MVN-Paket? – jgifford25

Antwort

1

Dies wird auf zwei Arten gelöst. Zuerst muss das POM für B die <-Abhängigkeit> für A einschließen. Solange sich A im Repository befindet, wenn B erstellt wird, erhält es die richtige Version.

Um sicherzustellen, dass A vor B gebaut wird, muss der Maven-Reaktor über diese Abhängigkeit Bescheid wissen. Dies geschieht in einem Multimodul-Build mit < Modulelementen. Das Top-Level-POM ist für < Packaging> Pom </Packaging> und es würde zwei < Modul> Elemente, eins für A und eins für B. Es ist egal, welche Reihenfolge sie aufgeführt sind oder wie tief, wenn sie Sind sie vom Quellprojekt erreichbar, werden sie in der richtigen Reihenfolge erstellt.

Beachten Sie, dass es keine Möglichkeit gibt, B zu bauen und den Maven-Reaktor die Quelle für A finden und überprüfen zu lassen. Der Reaktor benötigt immer ein Quellenprojekt, und sowohl A als auch B müssen durch den Graph von < Modulelementen gefunden werden. Das liegt daran, dass das Build für B nicht erkennen kann, ob das Repository-Artefakt für A aktuell ist, es muss A's Build laufen lassen und es herausfinden lassen. Und damit sie dies gleichzeitig tun können, muss ein Elternprojekt, das beide wie hier beschrieben enthält, das Quellprojekt sein, das erstellt wird.

Beachten Sie auch, dass Maven für solche Projekte mit mehreren Modulen nicht langsamer als Ant ist. Wenn Sie Ihr Maven-Projekt in eine IDE importieren, führt dies im Allgemeinen zu wesentlich schnelleren Builds als Maven.

+0

Meine pom.xml für Projekt B listet Projekt A als Abhängigkeit auf. Das Problem ist, dass das installierte Projekt A und nicht das Projekt A im Dateisystem verwendet wird. Dies macht die Entwicklung zu einem Schmerz. Grundsätzlich möchte ich, dass Projekt A automatisch jedes Mal neu installiert wird, wenn Projekt B neu kompiliert wird. –

+0

Dann müssen Sie ein Eltern-POM mit diesen beiden Projekten erstellen und von dort erstellen. Oder ziehe es in eine IDE. –

+0

Für andere, die auf diese Frage stoßen könnten, ist die Antwort im Grunde, dass es unmöglich ist. Brian schlug im anderen Thread vor, dass die Verwendung von Maven für die Entwicklung einfach zu schmerzhaft ist und stattdessen nur zum Verpacken eines endgültigen Builds verwendet werden sollte. http://StackOverflow.com/Questions/4371373 –

0

Wenn Sie in der Eclipse-IDE mit m2eclipse arbeiten, können Sie das Workspace-Abhängigkeitsmanagement sowohl für die Kompilierungszeit als auch für die Maven-Startkonfiguration aktivieren. In diesem Fall werden kompilierte Klassen aus dem abhängigen Projekt anstelle des Jar aus dem lokalen Maven-Repository verwendet. Das funktioniert für ein reguläres Projekt ohne maßgeschneiderte Glasverpackung.

Natürlich erstellen und installieren Sie in der Befehlszeile jedes Projekt, oder verwenden Sie ein Reaktorprojekt, um beide Projekte in einem Lauf zu erstellen, aber das ist wesentlich weniger bequem als das Arbeiten in der IDE.

+0

Ich habe "Abhängigkeiten von Workspace-Projekten auflösen" aktiviert, was der Standard ist. Wenn ich jedoch mein Projekt B pom.xml in Eclipse öffne und auf die Registerkarte "Abhängigkeitshierarchie" gehe, sehe ich, dass es transitive Abhängigkeiten von Projekt A basierend auf dem installierten Projekt A und nicht das Projekt A in meinem Arbeitsbereich bezieht. –

Verwandte Themen