it-swarm-id.com

Nonaktifkan plugin Maven yang ditentukan dalam POM induk

Saya menggunakan POM induk yang mendefinisikan plugin yang saya tidak ingin dijalankan di POM anak. Bagaimana saya bisa menonaktifkan plugin di child pom sepenuhnya?

Kendala: Saya tidak dapat mengubah POM induk itu sendiri.

141
tobiasbayer

Berikut ini berfungsi untuk saya ketika menonaktifkan Findbugs di POM anak:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

Catatan: definisi penuh dari plugin Findbugs ada di induk/super POM kami, jadi itu akan mewarisi versi dan seterusnya.

Di Maven 3, Anda harus menggunakan:

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

untuk plugin.

176
Alex

Lihat apakah plugin memiliki parameter konfigurasi 'lewati'. Hampir semuanya melakukannya. jika ya, tambahkan saja ke deklarasi pada anak:

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

Jika tidak, gunakan:

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

Utasnya sudah tua, tapi mungkin seseorang masih tertarik. Bentuk terpendek yang saya temukan adalah peningkatan lebih lanjut pada contoh dari λLex dan bmargulies. Tag eksekusi akan terlihat seperti:

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

2 poin yang ingin saya soroti:

  1. fase diatur ke tidak ada, yang terlihat kurang hacky daripada 'tidak ada', meskipun masih merupakan hack.
  2. id harus sama dengan eksekusi yang ingin Anda timpa. Jika Anda tidak menentukan id untuk dieksekusi, Maven akan melakukannya secara implisit (dengan cara yang tidak diharapkan secara intuitif oleh Anda).

Setelah memposting ternyata sudah dalam stackoverflow: Dalam proyek multi-modul Maven, bagaimana saya bisa menonaktifkan plugin dalam satu anak?

33
Ivan Bondarenko

Saya tahu utas ini benar-benar tua tetapi solusi dari @Ivan Bondarenko membantu saya dalam situasi saya.

Saya memiliki yang berikut di pom.xml saya.

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

Yang saya inginkan adalah menonaktifkan eksekusi generate-citrus-war untuk profil tertentu dan ini solusinya:

<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>
3
Liviu Ilea