Desativar um plug-in Maven definido em um POM pai

158

Estou usando um POM pai que define um plug-in que não quero que seja executado em um POM filho. Como posso desativar completamente o plug-in no child pom?

Restrição: Não consigo alterar o POM principal.

tobiasbayer
fonte

Respostas:

205

O seguinte funciona para mim ao desativar o Findbugs em um POM filho:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>ID_AS_IN_PARENT</id> <!-- id is necessary sometimes -->
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

Nota: a definição completa do plug-in Findbugs está em nosso pai / super POM, portanto herdará a versão e assim por diante.

No Maven 3, você precisará usar:

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

para o plugin.

Alex
fonte
8
Enquanto isso está "correto", ou seja, funciona, deve-se notar que é um recurso não especificado (ou pelo menos não documentado ). Não existe uma fase oficial chamada 'nenhuma'. Então, você também pode colocar 'foo' lá.
Marcel Stör
1
Para mim, no Maven 3, isso não funciona. <skip> true </skip> como bmargulies trabalhos sugeridos #
mibutec
10
Eu tive que adicionar a <id>…</id>parte do POM pai, então funcionou para mim.
mirabilos
4
A solução Maven 3 realmente não desativa o plugin, pois não? De acordo com a saída, o plugin ainda é executado. Se ele respeitará a configuração de ignorar e como / o que escolher ignorar, parece depender do plug-in individual.
Zero3
10
O comentário de mirabilos é a solução correta para o Maven 3 e é portátil em todos os plugins. Nem todos os plugins têm um <skip>parâmetro.
Gili
60

Veja se o plugin possui um parâmetro de configuração 'skip'. Quase todos fazem. se isso acontecer, basta adicioná-lo a uma declaração no filho:

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

Caso contrário, use:

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>
bmargulies
fonte
Que tal nomear o plug-in com o qual você está trabalhando e executar help: eficazes-pom para ver se você realmente tem a execução correta.
bmargulies
1
Também procure plugins versus pluginManagement. O último substitui o anterior.
bmargulies
Estou usando o plugin Cobertura e não quero executá-lo no pom filho.
21711 Tobiasbayer
A meta de verificação tem um salto em 2.5. Isso não aconteceu antes. A meta de cobertura não.
bmargulies
Eu não quero pular apenas a verificação, mas toda a execução do plugin.
21411 Tobiasbayer
37

O tópico é antigo, mas talvez alguém ainda esteja interessado. A forma mais curta que encontrei é uma melhoria adicional no exemplo de λlex e bmargulies. A tag de execução será semelhante a:

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

2 pontos que quero destacar:

  1. A fase está definida para nada, que parece menos hacky do que 'none', embora ainda seja um hack.
  2. id deve ser o mesmo que a execução que você deseja substituir. Se você não especificar o ID para execução, o Maven o fará implicitamente (de uma maneira que não é esperada intuitivamente por você).

Após a publicação, ela já está no stackoverflow: em um projeto com vários módulos do Maven, como posso desativar um plug-in em um filho?

Ivan Bondarenko
fonte
1
Para o registro: os IDs de execução padrão seguir regras simples que são estabelecidos nesta resposta: stackoverflow.com/a/34599117/7641
Jens Bannmann
2
Vale a pena notar que esta solução realmente desativa (como solicitado pelo OP) o plug-in (para o ID de execução fornecido) em vez de depender de uma opção "skip" específica do plug-in.
precisa saber é
3

Eu sei que esse tópico é muito antigo, mas a solução de @Ivan Bondarenko me ajudou na minha situação.

Eu tinha o seguinte no meu 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>

O que eu queria era desativar a execução de generate-citrus-warum perfil específico e esta era a solução:

<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>
Liviu Ilea
fonte