Deshabilitar un complemento Maven definido en un POM padre


158

Estoy usando un POM principal que define un complemento que no quiero que se ejecute en un POM secundario. ¿Cómo puedo desactivar completamente el complemento en el pom niño?

Restricción: No puedo cambiar el POM padre mismo.

Respuestas:


205

Lo siguiente funciona para mí cuando deshabilito Findbugs en un niño POM:

<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: la definición completa del complemento Findbugs está en nuestro padre / super POM, por lo que heredará la versión y demás.

En Maven 3, deberás usar:

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

para el complemento


8
Si bien esto es "correcto", es decir, funciona, debe tenerse en cuenta que es una característica no especificada (o al menos no documentada ). No hay una fase oficial llamada 'ninguna'. Entonces, también podrías poner 'foo' allí.
Marcel Stör

1
Para mí en Maven 3 esto no funciona. <skip> verdadero </skip> como bmargulies sugirió trabajos
mibutec

10
Tuve que agregar la <id>…</id>parte del POM principal, luego funcionó para mí.
mirabilos

44
Sin embargo, la solución Maven 3 realmente no deshabilita el complemento, ¿verdad? Según el resultado, el complemento aún se ejecuta. Si respeta la configuración de omisión y cómo / qué elige omitir, parece depender del complemento individual.
Zero3

10
El comentario de mirabilos es la solución correcta para Maven 3 y es portátil en todos los complementos. No todos los complementos tienen un <skip>parámetro.
Gili

60

Vea si el complemento tiene un parámetro de configuración 'omitir'. Casi todos lo hacen. si es así, simplemente agréguelo a una declaración en el elemento secundario:

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

Si no, entonces use:

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

¿Qué te parece nombrar el complemento con el que estás trabajando y ejecutar help: efectivo-pom para ver si realmente tienes la ejecución correcta?
bmargulies

1
También busque plugins versus pluginManagement. El último anula al primero.
bmargulies

Estoy usando el complemento Cobertura y no quiero ejecutarlo en el niño pom.
tobiasbayer

El objetivo de verificación tiene un salto en 2.5. No lo hizo antes. El objetivo de cobertura no.
bmargulies

No quiero omitir solo el cheque, sino toda la ejecución del complemento.
tobiasbayer

37

El hilo es viejo, pero tal vez alguien todavía está interesado. La forma más corta que encontré es una mejora adicional en el ejemplo de λlex y bmargulies. La etiqueta de ejecución se verá así:

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

2 puntos que quiero destacar:

  1. La fase no se establece en nada, lo que parece menos hacky que 'none', aunque sigue siendo un hack.
  2. id debe ser lo mismo que la ejecución que desea anular. Si no especifica la identificación para la ejecución, Maven lo hará implícitamente (de una manera que usted no espera intuitivamente).

Después de publicarlo, ya se encuentra en stackoverflow: en un proyecto de varios módulos de Maven, ¿cómo puedo desactivar un complemento en un niño?


1
Para el registro: los ID de ejecución predeterminados siguen reglas simples que se establecen en esta respuesta: stackoverflow.com/a/34599117/7641
Jens Bannmann

2
Vale la pena señalar que esta solución en realidad deshabilita (como solicitó OP) el complemento (para la ID de ejecución dada) en lugar de confiar en una opción de "omisión" específica del complemento.
Zero3

3

Sé que este hilo es muy antiguo, pero la solución de @Ivan Bondarenko me ayudó en mi situación.

Tenía lo siguiente en mi 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>

Lo que quería era deshabilitar la ejecución de generate-citrus-warun perfil específico y esta era la solución:

<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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.