Wyłącz wtyczkę Maven zdefiniowaną w nadrzędnym POM

158

Używam macierzystego POM, który definiuje wtyczkę, której nie chcę uruchamiać w podrzędnym POM. Jak mogę całkowicie wyłączyć wtyczkę w pompie dziecięcym?

Ograniczenie: nie mogę zmienić samego macierzystego POM.

tobiasbayer
źródło

Odpowiedzi:

205

Podczas wyłączania funkcji Findbugs w dziecku 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>

Uwaga: pełna definicja wtyczki Findbugs znajduje się w naszym nadrzędnym / super POM, więc odziedziczy wersję i tak dalej.

W Maven 3 będziesz potrzebować:

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

dla wtyczki.

Alex
źródło
8
Chociaż jest to „poprawne”, tj. Działa, należy zauważyć, że jest to nieokreślona (lub przynajmniej nieudokumentowana ) funkcja. Nie ma oficjalnej fazy zwanej „brakiem”. Więc równie dobrze możesz umieścić tam „foo”.
Marcel Stör
1
U mnie w Maven 3 to nie działa. <skip> prawda </skip> jak bmargulies sugerowane prace
mibutec
10
Musiałem dodać <id>…</id>część macierzystego POM, wtedy u mnie zadziałało.
mirabilos
4
Jednak rozwiązanie Maven 3 tak naprawdę nie wyłącza wtyczki, prawda? Zgodnie z danymi wyjściowymi wtyczka jest nadal wykonywana. To, czy następnie przestrzega konfiguracji pomijania i jak / co zdecyduje się pominąć, wydaje się zależeć od indywidualnej wtyczki.
Zero3
10
Komentarz mirabilos jest poprawnym rozwiązaniem dla Maven 3 i jest przenośny we wszystkich wtyczkach. Nie wszystkie wtyczki mają <skip>parametr.
Gili
60

Sprawdź, czy wtyczka ma parametr konfiguracyjny „pomiń”. Prawie wszyscy. jeśli tak, po prostu dodaj to do deklaracji w dziecku:

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

Jeśli nie, użyj:

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>
bmargulies
źródło
Co powiesz na nazwanie wtyczki, z którą pracujesz, i uruchomienie pomocy: efektywny-pom, aby sprawdzić, czy naprawdę masz poprawne wykonanie.
bmargulies
1
Zwróć także uwagę na wtyczki i zarządzanie wtyczkami. Późniejszy ma pierwszeństwo przed pierwszym.
bmargulies
Używam wtyczki Cobertura i nie chcę jej uruchamiać w pompie dziecka.
tobiasbayer
Celem czeku jest przeskok w 2.5. Wcześniej nie. Celem Cobertury nie jest.
bmargulies
Nie chcę pominąć tylko sprawdzenia, ale całe wykonanie wtyczki.
tobiasbayer
37

Wątek jest stary, ale może ktoś jest nadal zainteresowany. Najkrótsza forma, jaką znalazłem, to dalsze ulepszenia na przykładzie λlex i bmargulies. Tag wykonania będzie wyglądał następująco:

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

2 punkty, które chcę podkreślić:

  1. faza jest ustawiona na zero, co wygląda mniej hackowo niż „none”, chociaż nadal jest hackerem.
  2. id musi być taki sam jak wykonanie, które chcesz przesłonić. Jeśli nie określisz id do wykonania, Maven zrobi to niejawnie (w sposób, którego nie oczekujesz intuicyjnie).

Po wysłaniu okazało się, że jest już w stackoverflow: W wielomodułowym projekcie Maven, jak mogę wyłączyć wtyczkę w jednym dziecku?

Ivan Bondarenko
źródło
1
Dla
przypomnienia
2
Warto zauważyć, że to rozwiązanie faktycznie wyłącza (o co prosił OP) wtyczkę (dla podanego identyfikatora wykonania) zamiast polegać na opcji „pomiń” specyficznej dla wtyczki.
Zero3
3

Wiem, że ten wątek jest naprawdę stary, ale rozwiązanie od @Ivan Bondarenko pomogło mi w mojej sytuacji.

W moim 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>

Zależało mi na wyłączeniu wykonywania generate-citrus-wardla określonego profilu i takie było rozwiązanie:

<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
źródło