Nonaktifkan plugin Maven yang ditentukan dalam POM induk


158

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.

Jawaban:


205

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

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

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

Di Maven 3, Anda harus menggunakan:

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

untuk plugin.


8
Meskipun ini "benar" yaitu berfungsi, perlu dicatat bahwa ini adalah fitur yang tidak ditentukan (atau setidaknya tidak berdokumen ). Tidak ada fase resmi yang disebut 'tidak ada'. Jadi, Anda mungkin juga meletakkan 'foo' di sana.
Marcel Stör

1
Bagi saya di Maven 3 ini tidak berhasil. <skip> true </skip> seperti bmargulies menyarankan berfungsi
mibutec

10
Saya harus menambahkan <id>…</id>bagian dari POM induk, maka itu berhasil bagi saya.
mirabilos

4
Solusi Maven 3 tidak benar-benar menonaktifkan plugin, bukan? Menurut output, plugin ini masih dieksekusi. Apakah itu kemudian menghormati konfigurasi lewati, dan bagaimana / apa yang ia lewati, tampaknya tergantung pada masing-masing plugin.
Zero3

10
Komentar mirabilos adalah solusi yang tepat untuk Maven 3 dan portabel di semua plugin. Tidak semua plugin memiliki <skip>parameter.
Gili

60

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>

Bagaimana dengan menamai plugin yang Anda gunakan, dan menjalankan bantuan: pom-efektif untuk melihat apakah Anda benar-benar memiliki eksekusi.
bmargulies

1
Perhatikan juga plugin versus Manajemen plugin. Yang kemudian menimpa yang pertama.
bmargulies

Saya menggunakan plugin Cobertura dan saya tidak ingin menjalankannya di child pom.
tobiasbayer

Tujuan pemeriksaan memiliki lompatan 2.5. Itu tidak terjadi sebelumnya. Tujuan cobertura tidak.
bmargulies

Saya tidak ingin melewatkan hanya pemeriksaan tetapi seluruh eksekusi plugin.
tobiasbayer

37

Utasnya sudah tua, tapi mungkin seseorang masih tertarik. Bentuk terpendek yang saya temukan adalah perbaikan 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?


1
Sebagai catatan: ID eksekusi default mengikuti aturan sederhana yang tercantum dalam jawaban ini: stackoverflow.com/a/34599117/7641
Jens Bannmann

2
Perlu dicatat bahwa solusi ini benar-benar menonaktifkan (seperti yang diminta OP) plugin (untuk ID eksekusi yang diberikan) alih-alih mengandalkan opsi "lewati" khusus plugin.
Zero3

3

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

Saya memiliki yang berikut di blog saya 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>

Apa yang saya inginkan, adalah menonaktifkan eksekusi generate-citrus-waruntuk 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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.