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.

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.


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>

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?


1

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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.