Verwalten von Multi-Modul-Abhängigkeiten mit dem Maven Assembly-Plugin

8

Ich benutze das Maven-Assembly-Plugin, um eine Assembly für mein Multi-Modul-Projekt zu erstellen. Es gibt zwei separate Anwendungen, die aus diesem Multi-Modul-Projekt erstellt wurden und jeweils über separate Abhängigkeiten verfügen. Ich habe einen benutzerdefinierten Assembly-Deskriptor erstellt, der zwei Verzeichnisse (für jede Anwendung) mit Modul-Builds und ihren jeweiligen Abhängigkeiten zusammenstellt. Es macht alles in Ordnung, aber eine Sache - es stellt Abhängigkeiten für beide Module der jeweils anderen Baugruppe.

Das Folgende ist eine vereinfachte Version meines Projekts, die genau das gleiche Verhalten hat.

Betrachten Sie ein Projekt, das aus zwei Modulen und einem Baugruppenmodul besteht:

%Vor%

Ich habe Abhängigkeiten rein zur Demonstration hinzugefügt:

%Vor%

Hier ist das Eltern-POM:

%Vor%

module1 POM:

%Vor%

module2 POM:

%Vor%

Montage POM:

%Vor%

Und schließlich der Assembly Deskriptor:

%Vor%

Wie Sie sehen, ist die Assembly an die Paketphase gebunden. Also, wenn ich

ausführe %Vor%

aus dem übergeordneten Verzeichnis, ich habe die folgende Assembly

%Vor%

Grundsätzlich besteht das Problem hier darin, dass module1 nicht von commons-Daemon abhängig ist, sondern das Assembly-Plugin die Abhängigkeit beinhaltet. In ähnlicher Weise mit module2 und commons-cli.

Kann jemand erklären, warum sich das Assembly-Plugin so verhält?

Was wäre eine Lösung?

    
sertsy 27.01.2012, 13:26
quelle

1 Antwort

10

Ich hatte schon immer ähnliche Erfahrungen mit dem Assembly-Plugin bei Multi-Modul-Projekten, bei denen das Endergebnis nicht das war, was ich erwartet hatte. Ich hoffe, dass jemand anders eine genauere Antwort geben kann, warum dies geschieht und wie diese beiden Konzepte am besten gemeinsam genutzt werden können.

Eine mögliche Problemumgehung wäre, dass module1 und module2 ihre eigenen Assembly-Artefakte generieren, die ihre jeweiligen jars und Abhängigkeiten enthalten. Dann können Sie die POM-Datei des Assembly-Submoduls so ändern, dass Abhängigkeiten von den generierten Verteilungsartefakten aus den gleichgeordneten Modulen bestehen und diese dann in eine neue Assembly entpackt werden.

In den Pom-Dateien von Module1 und Module2 können Sie eine Assembly-Plugin-Konfiguration zu Ihrer Package-Phase hinzufügen, genau wie Sie es mit dem Assembly-Submodul getan haben.

%Vor%

Module1 hätte eine src / main / assembly / descriptor.xml wie diese

%Vor%

Und Module2 wird eine ähnliche src / main / assembly / descriptor.xml

haben %Vor%

Dann würden Sie in der assembly / pom.xml die Zip-Artefakte von Modul 1 und 2 als Abhängigkeiten hinzufügen

%Vor%

... und richte die Datei assembly / src / main / assembly / descriptor.xml so aus, dass sie so aussieht

%Vor%

Wie ich bereits sagte, wäre dies eine mögliche Lösung und fügt Ihrem Build-Prozess leider eine erhebliche Menge zusätzlicher XML-Konfiguration hinzu. Aber es funktioniert.

    
Keith 27.01.2012, 20:02
quelle