web-dev-qa-db-fra.com

Désactiver un plugin Maven défini dans un POM parent

J'utilise un POM parent qui définit un plug-in que je ne souhaite pas exécuter dans un POM enfant. Comment puis-je désactiver complètement le plug-in du pom enfant?

Contrainte: Je ne peux pas changer le POM parent lui-même.

141
tobiasbayer

Ce qui suit fonctionne pour moi lors de la désactivation de Findbugs dans un POM enfant:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

Remarque: la définition complète du plug-in Findbugs se trouve dans notre parent/super POM, de sorte qu'il héritera de la version, etc.

Dans Maven 3, vous devrez utiliser:

 <configuration>
      <skip>true</skip>
 </configuration>

pour le plugin.

176
Alex

Voir si le plugin a un paramètre de configuration 'skip'. Presque tous le font. si c'est le cas, ajoutez-le simplement à une déclaration dans l'enfant:

<plugin>
   <groupId>group</groupId>
   <artifactId>artifact</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>

Si non, alors utilisez:

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>
54
bmargulies

Le fil est vieux, mais peut-être que quelqu'un est toujours intéressé. La forme la plus courte que j'ai trouvée est une amélioration supplémentaire par rapport à l'exemple de λLex et de bmargulies. La balise d'exécution ressemblera à:

<execution>
    <id>TheNameOfTheRelevantExecution</id>
    <phase/>
</execution>

2 points que je veux mettre en évidence:

  1. la phase est réglée sur néant, ce qui semble moins hacky que 'none', bien qu'il s'agisse encore d'un hack.
  2. id doit être identique à l'exécution que vous souhaitez remplacer. Si vous ne spécifiez pas id pour l'exécution, Maven le fera de manière implicite (d'une manière qui ne vous attend pas de manière intuitive).

Une fois que la publication a été trouvée, elle est déjà dans stackoverflow: Dans un projet multi-module Maven, comment puis-je désactiver un plugin dans un enfant?

33
Ivan Bondarenko

Je sais que ce fil est vraiment vieux mais la solution de @Ivan Bondarenko m'a aidé dans ma situation.

J'ai eu le suivant dans mon pom.xml.

<build>
    ...
    <plugins>
         <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <execution>
                        <id>generate-citrus-war</id>
                        <goals>
                            <goal>test-war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</build>

Ce que je voulais, était de désactiver l'exécution de generate-citrus-war pour un profil spécifique et c'était la solution:

<profile>
    <id>it</id>
    <build>
        <plugins>
            <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <!-- disable generating the war for this profile -->
                    <execution>
                        <id>generate-citrus-war</id>
                        <phase/>
                    </execution>

                    <!-- do something else -->
                    <execution>
                        ...
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
3
Liviu Ilea