Was ist pluginManagement in Mavens pom.xml?

266

Dies ist ein Ausschnitt aus meiner POM-Datei.

....
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

Ich benutze es erfolgreich mit dem Befehl

mvn install

Wenn ich jedoch versuche, es in das Tag "pluginManagement" einzuschließen, maven-dependency-pluginfunktioniert es nicht mehr, wenn ich das installZiel starte . Warum ändert das Tag "pluginManagement" das Build-Verhalten? Oder sollte ich ein anderes Ziel oder eine andere Option verwenden?

Andrea Borgogelli Avveduti
quelle

Antworten:

299

Sie müssen noch hinzufügen

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>

In Ihrem Build pluginManagementist dies nur eine Möglichkeit, dieselbe Plugin-Konfiguration für alle Ihre Projektmodule zu verwenden.

Aus der Maven-Dokumentation:

pluginManagement : ist ein Element, das neben den Plugins angezeigt wird. Die Plugin-Verwaltung enthält Plugin-Elemente auf ähnliche Weise, mit der Ausnahme, dass anstelle der Konfiguration von Plugin-Informationen für diesen bestimmten Projekt-Build Projekt-Builds konfiguriert werden sollen, die von diesem erben. Dies konfiguriert jedoch nur Plugins, auf die tatsächlich innerhalb des Plugins-Elements in den untergeordneten Elementen verwiesen wird. Die Kinder haben das Recht, PluginManagement-Definitionen zu überschreiben.

jordeu
quelle
266

Der Unterschied zwischen <pluginManagement/>und <plugins/>ist, dass ein <plugin/>unter:

  • <pluginManagement/>Definiert die Einstellungen für Plugins, die von Modulen in Ihrem Build geerbt werden. Dies ist ideal für Fälle, in denen Sie eine übergeordnete POM-Datei haben.

  • <plugins/>ist ein tatsächlicher Aufruf des Plugins. Es kann von a geerbt werden oder nicht <pluginManagement/>.

Sie müssen kein <pluginManagement/>in Ihrem Projekt haben, wenn es kein übergeordnetes POM ist. Wenn es sich jedoch um einen Eltern-Pom handelt, benötigen Sie im Pom des Kindes eine Erklärung wie:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

Beachten Sie, dass Sie keine Konfiguration definieren. Sie können es vom übergeordneten Element erben, es sei denn, Sie müssen Ihren Aufruf weiter an die Anforderungen des untergeordneten Projekts anpassen.

Für genauere Informationen können Sie Folgendes überprüfen:

Carlspring
quelle
Danke für Ihre Antwort. Ich muss das PluginManagement- und das Plugin-Tag (für das Maven-Dependency-Plugin) in derselben POM-Datei mischen, da ich einen kleinen Fehler des M2E Eclipse IDE-Plugins umgehen muss. Siehe stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
7
Vielen Dank! :) Dies gilt auch für <dependency/>und <dependencyManagement/>. Sie definieren die Abhängigkeiten (zusammen mit ihren Versionen und Bereichen, wenn Sie möchten) im <dependencyManagement/>Abschnitt und dann in dem <dependencies/>Abschnitt, in dem Sie nur das groupIdund definieren artifactId.
Carlspring
1
Wenn ich ein Plugin zweimal ausführen muss, sollte ich Pluginmanagement verwenden?
Kalpesh Soni
@KalpeshSoni: Es kommt darauf an - möglicherweise möchten Sie eine gemeinsame Konfiguration zwischen den beiden Ausführungen haben, die Sie nicht neu definieren müssen.
Carlspring
39

Sie verwenden es pluginManagementin a parent pom, um es zu konfigurieren, falls jemand es verwenden child pommöchte, aber nicht jedes untergeordnete Plugin möchte es verwenden. Ein Beispiel kann sein, dass Sie super pomeinige Optionen für das Maven Javadoc-Plugin definieren.

child pomMöglicherweise möchte nicht jeder Javadoc verwenden, daher definieren Sie diese Standardeinstellungen in einem pluginManagementAbschnitt. Der untergeordnete POM, der das Javadoc-Plugin verwenden möchte, definiert lediglich einen Plugin-Abschnitt und erbt die Konfiguration von der pluginManagementDefinition in der parent pom.

Wim Deblauwe
quelle
Danke dir. Ich möchte nur PluginManagement- und Plugin-Tags in derselben POM-Datei mischen, da ich einen kleinen Fehler des M2E-Plugins für Eclipse umgehen muss. Siehe stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
3

pluginManagement: ist ein Element, das neben den Plugins angezeigt wird. Die Plugin-Verwaltung enthält Plugin-Elemente auf ähnliche Weise, mit der Ausnahme, dass anstelle der Konfiguration von Plugin-Informationen für diesen bestimmten Projekt-Build Projekt-Builds konfiguriert werden sollen, die von diesem erben. Dies konfiguriert jedoch nur Plugins, auf die tatsächlich innerhalb des Plugins-Elements in den untergeordneten Elementen verwiesen wird. Die Kinder haben das Recht, PluginManagement-Definitionen zu überschreiben.

Von http://maven.apache.org/pom.html#Plugin%5FManagement

Kopiert von:

Maven2 - Problem mit PluginManagement und Eltern-Kind-Beziehung

Ameise
quelle