330 votes

Maven : qu'est-ce que le pluginManagement ?

Voici 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'inclure dans le tag "pluginManagement", le maven-dependency-plugin cesse de fonctionner lorsque je lance l'objectif d'installation. Pourquoi le tag "pluginManagement" change-t-il le comportement de la construction ? Ou dois-je utiliser un autre objectif ou une autre option ?

Merci d'avance pour toute aide

355voto

jordeu Points 2925

Vous devez encore ajouter

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

dans votre construction, car pluginManagement n'est qu'un moyen de partager la même configuration de plugin entre tous les modules de votre projet.

Extrait de la documentation de Maven :

gestion des plugins : est un élément que l'on voit à côté des plugins. La gestion des plugins contient des éléments de plugins de la même manière, sauf qu'au lieu de configurer les informations sur les plugins pour cette version particulière du projet, elle est destinée à configurer les versions du projet qui héritent de celle-ci. Cependant, cela ne configure que les plugins qui sont effectivement référencés dans l'élément plugins des enfants. Les enfants ont tout à fait le droit de remplacer les définitions de pluginManagement.

350voto

carlspring Points 7885

La différence entre <pluginManagement/> et <plugins/> c'est que :

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

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

Vous n'avez pas besoin d'avoir un <pluginManagement/> dans votre projet, s'il ne s'agit pas d'un POM parent. Cependant, si c'est 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 que vous ne définissez aucune configuration. Vous pouvez l'hériter du parent, à moins que vous n'ayez besoin d'ajuster votre invocation en fonction des besoins du projet enfant.

0 votes

Merci de votre réponse. J'ai besoin de mélanger les balises pluginManagement et plugin (pour le maven-dependency-plugin) dans le même fichier pom, car j'ai besoin de contourner un petit bug du plugin M2E Eclipse IDE. Voir stackoverflow.com/questions/8706017/

9 votes

Merci ! :) C'est la même chose pour <dependency/> y <dependencyManagement/> . Vous définissez les dépendances (ainsi que leurs versions et leurs domaines d'application, si vous le souhaitez) dans le champ <dependencyManagement/> et ensuite dans la section <dependencies/> vous définissez simplement la section groupId y artifactId .

1 votes

Si je dois exécuter un plugin deux fois, dois-je utiliser pluginmanagement ?

47voto

Wim Deblauwe Points 2570

Vous utilisez pluginManagement dans un pom parent pour le configurer au cas où un pom enfant voudrait l'utiliser, mais pas tous les plugins enfants. Un exemple peut être que votre super pom définit certaines options pour le plugin Javadoc de maven. Chaque pom enfant peut ne pas vouloir utiliser Javadoc, donc vous définissez ces valeurs par défaut dans une section pluginManagement. Le pom enfant qui veut utiliser le plugin Javadoc, définit simplement une section plugin et hérite de la configuration de la définition pluginManagement du pom parent.

0 votes

Merci. Je cherche juste à mélanger les tags pluginManagement et plugin dans le même fichier pom car j'ai besoin de contourner un petit bug du plugin M2E pour Eclipse. Voir le stackoverflow.com/questions/8706017/

4voto

ant Points 8428

pluginManagement : est un élément que l'on voit à côté des plugins. Plugin Management contient des éléments de plugins de la même manière, sauf qu'au lieu de configurer les informations relatives aux plugins pour ce build de projet particulier, il est destiné à configurer les builds de projet qui héritent de celui-ci. Cependant, cela ne configure que les plugins qui sont effectivement référencés dans l'élément plugins des enfants. Les enfants ont tout à fait le droit de remplacer les définitions de pluginManagement.

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

Copié de :

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

2voto

velocity Points 1070

Donc si j'ai bien compris, je dirais que <pluginManagement> juste comme <dependencyManagement> sont tous deux utilisés pour partager uniquement la configuration entre un module parent et ses sous-modules.

Pour cela, nous définissons les configurations communes de la dépendance et du plugin dans le projet parent et ensuite il suffit de déclarer la dépendance/le plugin dans les sous-modules pour l'utiliser, sans avoir à définir une configuration pour lui (c'est-à-dire la version ou l'exécution, les objectifs, etc). Cela ne nous empêche pas de remplacer la configuration dans le sous-module.

En revanche <dependencies> y <plugins> sont hérités avec leurs configurations et ne doivent pas être redéclarés dans les sous-modules, sinon un conflit se produirait.

C'est bien ça ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X