Wie man maven-release-plugin config in einem Kind-Modul überschreibt

8

Ich habe einen Multi-Modul-Maven-Build, bei dem eines der untergeordneten Module ein zusätzliches Ziel erfordert, das als Teil eines Releases ausgeführt wird. Aber es sieht so aus, als ob irgendeine Konfiguration des maven-release-plugins im Kindmodul zugunsten der Standardkonfiguration im Elternmodul ignoriert wird.

Dies ist der Ausschnitt aus dem untergeordneten Modul. Die Plugin-Konfiguration ist die gleiche im Abschnitt pluginManagement des Eltern-Pom, aber ohne das benutzerdefinierte Element.

%Vor%

Ist es also möglich, dass ein untergeordnetes Modul die Konfiguration des übergeordneten Elements außer Kraft setzt und zusätzliche Ziele hinzufügt?

Maven Version 2.2.1

    
Kevin Stembridge 10.06.2011, 12:52
quelle

2 Antworten

11

Verwenden Sie combine.children="append" combine.self="override"

Eltern-POM

%Vor%

Kinderporno

%Vor%

Ergebnis

%Vor%

Siehe dieses Blog für weitere Details

    
Prashant Bhate 05.08.2011 16:39
quelle
2

Ja und nein. Sicherlich kann ein Child-Pom die Konfiguration eines von seinem Elternteil angegebenen Plugins außer Kraft setzen, und ich muss davon ausgehen, dass Sie es richtig gemacht haben, weil es nichts wirklich Schwieriges gibt. Wenn Sie die Ausgabe von mvn help:effective-pom überprüfen, sollten Sie in der Lage sein zu sehen, dass dieses Modul verschiedene Einstellungen für das Release-Plugin hat.

Das Problem, das Sie haben, ist mit dem Verhalten des Release-Plugins. Wenn Sie beispielsweise ein Ziel oder eine Phase - mvn compile - vom Stammmodul Ihres Projekts ausführen, führt es dieses Ziel / diese Phase zuerst auf dem Stammmodul und dann auf allen Modulen in der Reihenfolge des Reaktors aus wenn Sie es in jedem Modul selbst ausführen würden. Alle Anpassungen, die Sie den untergeordneten Modulen hinzugefügt haben, werden wie erwartet wirksam. Wenn Sie das Release-Plugin ausführen, wird only im Stammmodul ausgeführt. Es wird in keinem der untergeordneten Module ausgeführt. Stattdessen führt das Ausführen im Stammmodul zu einem neuen Build mit den gleichen Einstellungen wie das Root-Modul, das für alle anderen Module fast auf die gleiche Weise ausgeführt wird, mit der Ausnahme, dass die Konfiguration des Root-Moduls für alle Module verwendet wird. Ich kenne die genaue Semantik nicht, aber ich denke, dass dies analog zu Ihnen ist, wenn Sie die Releaseziele in jedem Kind manuell ausführen und die Konfigurationsoptionen als Systemeigenschaften in der Befehlszeile angeben: unabhängig davon, wie ein untergeordnetes Modul das Release-Plugin konfiguriert Befehlszeilenargumente gewinnen.

Ich habe mich nie selbst mit diesem Problem befasst, und es ist schwer zu sagen, ohne genau zu wissen, was Sie erreichen wollen. Vielleicht, wenn Sie ausdrücken können, was Sie in diesem speziellen Modul als Profil tun möchten, können Sie ein Profil zu Ihrem goals und oder preparationGoals hinzufügen. Alternativ gibt es eine arguments Option , die sowohl vorbereitet als auch ausgeführt werden kann Ziele, mit denen Sie vielleicht ein paar Tricks machen können.

    
Ryan Stewart 03.08.2011 02:30
quelle