Qu'est-ce que pluginManagement dans pom.xml de Maven?

266

Ceci est un extrait de mon fichier pom.

....
        <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>
...

Je l'utilise avec succès avec la commande

mvn install

Mais, lorsque j'essaie de l'enfermer dans la balise "pluginManagement", cela maven-dependency-plugincesse de fonctionner lorsque je lance l' installobjectif. Pourquoi la balise "pluginManagement" modifie-t-elle le comportement de génération? Ou devrais-je utiliser un autre objectif ou une autre option?

Andrea Borgogelli Avveduti
la source

Réponses:

299

Vous devez encore ajouter

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

dans votre build, car ce pluginManagementn'est qu'un moyen de partager la même configuration de plugin entre tous vos modules de projet.

De la documentation Maven:

pluginManagement : est un élément visible le long des plugins latéraux. Plugin Management contient des éléments de plug-in de la même manière, sauf que plutôt que de configurer les informations de plug-in pour cette version de projet particulière, il est destiné à configurer des versions de projet héritant de celle-ci. Cependant, cela ne configure que les plugins qui sont réellement référencés dans l'élément plugins des enfants. Les enfants ont le droit de remplacer les définitions de pluginManagement.

jordeu
la source
266

La différence entre <pluginManagement/>et <plugins/>est qu'un <plugin/>sous:

  • <pluginManagement/>définit les paramètres des plugins qui seront hérités par les modules de votre build. C'est idéal pour les cas où vous avez un fichier pom parent.

  • <plugins/>est une véritable invocation du plugin. Il peut ou non être hérité d'un <pluginManagement/>.

Vous n'avez pas besoin d'en avoir un <pluginManagement/>dans votre projet, s'il ne s'agit pas d'un POM parent. Cependant, s'il s'agit d'un pom parent, alors dans le pom de l'enfant, vous devez avoir une déclaration comme:

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

Remarquez comment vous ne définissez aucune configuration. Vous pouvez l'hériter du parent, sauf si vous avez besoin d'ajuster davantage votre invocation selon les besoins du projet enfant.

Pour des informations plus spécifiques, vous pouvez vérifier:

carlspring
la source
Merci pour votre réponse. J'ai besoin de mélanger le pluginManagement et le tag de plugin (pour le plugin maven-dependency) sur le même fichier pom, car j'ai besoin de contourner un petit bogue du plugin M2E Eclipse IDE. Voir stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
7
Merci! :) C'est la même chose pour <dependency/>et <dependencyManagement/>. Vous définissez les dépendances (ainsi que leurs versions et étendues, si vous le souhaitez) dans la <dependencyManagement/>section, puis dans la <dependencies/>section vous définissez simplement le groupIdet artifactId.
carlspring
1
si je dois exécuter un plugin deux fois, dois-je utiliser la gestion des plugins?
Kalpesh Soni
@ KalpeshSoni: Cela dépend - vous voudrez peut-être avoir une configuration commune entre les deux exécutions que vous ne voulez pas avoir à redéfinir.
carlspring
39

Vous utilisez pluginManagementdans un parent pompour le configurer au cas où quelqu'un child pomvoudrait l'utiliser, mais tous les plugins enfants ne veulent pas l'utiliser. Un exemple peut être que votre super pomdéfinit certaines options pour le plugin maven Javadoc.

Chacun child pomne voudra peut-être pas utiliser Javadoc, vous définissez donc ces valeurs par défaut dans une pluginManagementsection. Le pom enfant qui souhaite utiliser le plugin Javadoc, définit simplement une section plugin et héritera de la configuration de la pluginManagementdéfinition dans le parent pom.

Wim Deblauwe
la source
Je vous remercie. Je cherche juste à mélanger pluginManagement et plugin tags sur le même fichier pom car j'ai besoin de contourner un petit bug du plugin M2E pour Eclipse. Voir stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
3

pluginManagement: est un élément visible le long des plugins latéraux. Plugin Management contient des éléments de plug-in de la même manière, sauf que plutôt que de configurer les informations de plug-in pour cette version de projet particulière, il est destiné à configurer les versions de projet qui héritent de celle-ci. Cependant, cela ne configure que les plugins qui sont réellement référencés dans l'élément plugins des enfants. Les enfants ont le droit de remplacer les définitions de pluginManagement.

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

Copié de:

Maven2 - problème avec pluginManagement et relation parent-enfant

fourmi
la source