Üst POM'da tanımlanan bir Maven eklentisini devre dışı bırakma


158

Bir alt POM çalıştırmak istemiyorum bir eklenti tanımlayan bir üst POM kullanıyorum. Çocuk pom'daki eklentiyi nasıl tamamen devre dışı bırakabilirim?

Kısıtlama: Üst POM'un kendisini değiştiremiyorum.

Yanıtlar:


205

Bir çocuk POM'sinde Findbugs devre dışı bırakıldığında aşağıdakiler benim için çalışır:

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

Not: Findbugs eklentisinin tam tanımı ebeveyn / süper POM'umuzdadır, bu nedenle sürümü devralır ve bu şekilde devam eder.

Maven 3'te şunları kullanmanız gerekir:

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

eklenti için.


8
Bu "doğru" olsa da, yani işe yarıyorsa, bunun belirtilmemiş (veya en azından belgesiz ) bir özellik olduğuna dikkat edilmelidir . 'Hiçbiri' adı verilen resmi bir aşama yoktur. Yani, oraya 'foo' da koyabilirsiniz.
Marcel Stör

1
Benim için Maven 3'te bu işe yaramıyor. <skip> true </skip> bmargulies önerilen işler gibi
mibutec

10
<id>…</id>Ebeveyn POM'sinin bir kısmını eklemek zorunda kaldım , o zaman benim için çalıştı.
mirabilos

4
Maven 3 çözümü eklentiyi gerçekten devre dışı bırakmıyor, değil mi? Çıktıya göre, eklenti hala yürütülüyor. Daha sonra atlama yapılandırmasına uyup uymadığı ve atlamayı nasıl / ne seçtiği, ayrı eklentiye kalmış gibi görünüyor.
Zero3

10
mirabilos'un yorumu Maven 3 için doğru çözümdür ve tüm eklentiler arasında taşınabilir. Tüm eklentilerin bir <skip>parametresi yoktur.
Gili

60

Eklentinin 'atla' yapılandırma parametresine sahip olup olmadığına bakın. Neredeyse hepsi yapar. eğer öyleyse, bunu çocuktaki bir bildirime ekleyin:

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

Değilse, şunu kullanın:

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

Birlikte çalıştığınız eklentiyi adlandırmaya ve yardım çalıştırmaya ne dersiniz?
bmargulies

1
Ayrıca pluginManagement'a karşı eklentileri arayın. Daha sonra ilkini geçersiz kılar.
bmargulies

Cobertura eklentisini kullanıyorum ve bunu çocuk pom'da çalıştırmak istemiyorum.
tobiasbayer

Kontrol hedefinin 2.5'te atlaması var. Daha önce olmadı. Cobertura hedefi değil.
bmargulies

Ben sadece çek atlamak istemiyorum ama tüm eklenti yürütme.
tobiasbayer

37

Konu eski, ama belki biri hala ilgileniyor. Bulduğum en kısa form, λlex ve bmargulies örneğinde daha fazla gelişme. Yürütme etiketi şöyle görünecektir:

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

Vurgulamak istediğim 2 puan:

  1. faz, hala bir hack olsa da, 'hiçbirinden' daha az acayip görünen hiçbir şeye ayarlanmamıştır.
  2. id, geçersiz kılmak istediğiniz yürütme ile aynı olmalıdır. Yürütme için kimlik belirtmezseniz, Maven bunu örtük olarak yapar (sezgisel olarak sizin tarafınızdan beklenmeyen bir şekilde).

Gönderdikten sonra yığın akışı içinde bulunduğunu gördükten sonra: Maven çok modüllü bir projede, bir çocukta eklentiyi nasıl devre dışı bırakabilirim?


1
Kayıt için: varsayılan yürütme kimlikleri, bu cevapta belirtilen basit kuralları takip eder: stackoverflow.com/a/34599117/7641
Jens Bannmann

2
Bu çözümün , eklentiye özgü bir "atlama" seçeneğine güvenmek yerine eklentiyi (verilen yürütme kimliği için) aslında devre dışı bıraktığını (verilen istediği gibi) belirtmek gerekir.
Zero3

3

Bu konu gerçekten eski olduğunu biliyorum ama @Ivan Bondarenko gelen çözüm benim durumumda bana yardımcı oldu.

İçimde şunlar vardı 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>

Ne istedim, generate-citrus-warbelirli bir profil için yürütülmesini devre dışı bırakmak oldu ve bu çözüm oldu:

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.