Disabilita un plug-in Maven definito in un POM principale


158

Sto usando un POM padre che definisce un plugin che non voglio essere eseguito in un POM figlio. Come posso disabilitare completamente il plugin nel figlio pom?

Vincolo: non posso cambiare il POM genitore stesso.

Risposte:


205

Quanto segue funziona per me quando disabilito Findbugs in un POM figlio:

<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 definizione completa del plug-in Findbugs è nel nostro genitore / super POM, quindi erediterà la versione e così via.

In Maven 3, dovrai utilizzare:

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

per il plugin.


8
Anche se questo è "corretto", vale a dire che funziona, va notato che è una funzione non specificata (o almeno non documentata ). Non esiste una fase ufficiale chiamata "nessuna". Quindi, potresti anche mettere "foo" lì.
Marcel Stör

1
Per me in Maven 3 questo non funziona. <skip> true </skip> come le opere suggerite da
bmargulies

10
Ho dovuto aggiungere la <id>…</id>parte del genitore POM, quindi ha funzionato per me.
mirabilos,

4
La soluzione Maven 3 in realtà non disabilita il plugin, vero? Secondo l'output, il plugin è ancora eseguito. Se rispetta quindi la configurazione skip e come / cosa sceglie di saltare, sembra dipendere dal singolo plug-in.
Zero3

10
Il commento di mirabilos è la soluzione corretta per Maven 3 ed è portatile su tutti i plugin. Non tutti i plugin hanno un <skip>parametro.
Gili,

60

Verifica se il plugin ha un parametro di configurazione 'skip'. Quasi tutti lo fanno. in caso affermativo, aggiungilo a una dichiarazione nel figlio:

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

In caso contrario, utilizzare:

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

Che ne dici di nominare il plug-in con cui stai lavorando e di eseguire help: efficace-pom per vedere se hai davvero l'esecuzione corretta.
bmargulies,

1
Cerca anche plugin e pluginManagement. Il successivo sostituisce il primo.
bmargulies,

Sto usando il plugin Cobertura e non voglio eseguirlo nel figlio pom.
Tobiasbayer,

L'obiettivo del controllo ha un salto in 2.5. Non prima. L'obiettivo di cobertura no.
bmargulies,

Non voglio saltare solo il controllo ma l'intera esecuzione del plugin.
Tobiasbayer,

37

Il thread è vecchio, ma forse qualcuno è ancora interessato. La forma più breve che ho trovato è un ulteriore miglioramento dell'esempio di λlex e bmargulies. Il tag di esecuzione sarà simile a:

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

2 punti che voglio evidenziare:

  1. la fase è impostata su nulla, che sembra meno confusa di "nessuna", sebbene sia ancora un hack.
  2. l'id deve essere uguale all'esecuzione che si desidera sovrascrivere. Se non specifichi l'id per l'esecuzione, Maven lo farà implicitamente (in un modo che non ti aspetti intuitivamente da te).

Dopo che la pubblicazione è stata trovata, è già in StackOverflow: in un progetto multi-modulo Maven, come posso disabilitare un plugin in un bambino?


1
Per la cronaca: gli ID di esecuzione di default seguire semplici regole che sono disposti in questa risposta: stackoverflow.com/a/34599117/7641
Jens Bannmann

2
Vale la pena notare che questa soluzione disabilita effettivamente (come richiesto da OP) il plug-in (per l'ID di esecuzione fornito) invece di fare affidamento su un'opzione "skip" specifica del plug-in.
Zero3,

3

So che questa discussione è davvero vecchia ma la soluzione di @Ivan Bondarenko mi ha aiutato nella mia situazione.

Ho avuto il seguente nel mio 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>

Quello che volevo era disabilitare l'esecuzione di generate-citrus-warun profilo specifico e questa era la soluzione:

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.