Ich möchte verschiedene Ausführungen für Plugins im PluginManagement meines Eltern-Pom definieren und dann bestimmte Ausführungen an Phasen in den Child-Poms binden. Ich sehe ein inkonsistentes Verhalten, abhängig vom verwendeten Plugin und dem Speicherort des Abschnitts pluginManagement.
In diesem ersten Beispiel befindet sich das pluginManagement im übergeordneten Pom und definiert 2 Ausführungen für das Compiler-Plugin und 2 Ausführungen für das antrun-Plugin.
%Vor%
Und das Kind pom:
%Vor%
Das Ausführen von 'mvn clean install' auf dem untergeordneten Pom führt beide Ausführungen des Compiler-Plugins und nur die 1. Ausführung des antrun-Plugins aus, obwohl nur die 1. Ausführung jedes einzelnen an eine Phase gebunden war.
Verschieben Sie nun das pluginManagement auf den untergeordneten Pom:
%Vor%
Dieser Pom gibt das gewünschte Verhalten, das nur die 1. Ausführung für jedes Plugin ausführt. Das Compiler-Plugin (und die meisten anderen) funktionieren nur dann korrekt, wenn sich das pluginManagement im selben Pom befindet und jede Ausführung an phase = none gebunden ist (wahrscheinlich, weil es Ausführungen an eine Standardphase bindet). Das antrun Plugin funktioniert auf jeden Fall korrekt.
Wie kann ich dies erreichen, während ich den Abschnitt pluginManagement im Parent-Pom habe und unerwünschte Ausführungen nicht explizit an phase = none in den Child-Poms binden muss? Ist das ein Fehler in Maven oder ist dieses Verhalten irgendwie gerechtfertigt? Ich habe dies auf Maven 3.0.4 und Maven 2.2.1 mit den gleichen Ergebnissen versucht.
Das angegebene Beispiel funktioniert ordnungsgemäß. Ich habe den Elternteil nach dem Einfügen des Fixes nicht erneut bereitgestellt.
Die meisten Plugins binden Ausführungen an eine Standardphase. Wenn also eine Ausführung eines Plugins ausgelöst wird, werden alle nicht gebundenen Ausführungen an die Standardphase gebunden und ebenfalls ausgeführt.
Um dieses Verhalten zu vermeiden, sollten alle Ausführungen des Plugins im Abschnitt pluginManagement des Eltern-Poms an phase = none gebunden sein (wie im Beispiel gezeigt). Auf diese Weise wird keine Ausführung ausgeführt, es sei denn, die Phase wird in den untergeordneten POMs explizit überschrieben.
Tags und Links maven