Vô hiệu hóa plugin Maven được xác định trong POM gốc


157

Tôi đang sử dụng POM gốc xác định plugin mà tôi không muốn chạy trong POM con. Làm thế nào tôi có thể vô hiệu hóa hoàn toàn các plugin trong pom con?

Ràng buộc: Tôi không thể thay đổi chính POM gốc.

Câu trả lời:


204

Những điều sau đây hoạt động với tôi khi vô hiệu hóa Findbugs trong POM trẻ em:

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

Lưu ý: định nghĩa đầy đủ của plugin Findbugs nằm trong cha mẹ / siêu POM của chúng tôi, vì vậy nó sẽ kế thừa phiên bản và hơn thế nữa.

Trong Maven 3, bạn sẽ cần sử dụng:

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

cho các plugin.


8
Mặc dù điều này là "chính xác", nghĩa là nó hoạt động, cần lưu ý rằng đó là một tính năng không xác định (hoặc ít nhất là không có giấy tờ ). Không có giai đoạn chính thức gọi là 'không'. Vì vậy, bạn cũng có thể đặt 'foo' ở đó.
Marcel Stor

1
Đối với tôi trong Maven 3, điều này không hoạt động. <Skip> true </ Skip> như các tác phẩm được đề xuất của
bmargulies

10
Tôi đã phải thêm <id>…</id>một phần của POM cha mẹ, sau đó nó làm việc cho tôi.
mirabilos

4
Tuy nhiên, giải pháp Maven 3 không thực sự vô hiệu hóa plugin, phải không? Theo đầu ra, plugin vẫn được thực thi. Cho dù sau đó nó có tôn trọng cấu hình bỏ qua hay không và cách thức / những gì nó chọn bỏ qua, dường như tùy thuộc vào từng plugin.
Zero3

10
Nhận xét của mirabilos là giải pháp chính xác cho Maven 3 và có thể di động trên tất cả các plugin. Không phải tất cả các plugin đều có <skip>tham số.
Gili

60

Xem plugin có tham số cấu hình 'bỏ qua' không. Gần như tất cả đều làm. nếu có, chỉ cần thêm nó vào một khai báo ở trẻ:

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

Nếu không, sau đó sử dụng:

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

Làm thế nào về việc đặt tên plugin bạn đang làm việc và chạy trợ giúp: hiệu quả-pom để xem bạn có thực sự thực hiện đúng không.
bmargulies

1
Cũng tìm ra các plugin so với pluginQuản lý. Càng về sau càng đè lên người cũ.
bmargulies

Tôi đang sử dụng plugin Cobertura và tôi không muốn chạy nó trong pom con.
tobiasbayer

Mục tiêu kiểm tra có bỏ qua trong 2,5. Nó đã không trước đây. Mục tiêu cobertura không.
bmargulies

Tôi không muốn bỏ qua kiểm tra nhưng toàn bộ thực thi plugin.
tobiasbayer

37

Chủ đề đã cũ, nhưng có lẽ ai đó vẫn quan tâm. Hình thức ngắn nhất tôi tìm thấy là cải thiện hơn nữa về ví dụ từ λlex và bmargulies. Thẻ thực thi sẽ trông như sau:

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

Tôi muốn nhấn mạnh 2 điểm:

  1. pha được đặt thành không có gì, trông có vẻ ít hack hơn 'none', mặc dù vẫn là hack.
  2. id phải giống như thực thi bạn muốn ghi đè. Nếu bạn không chỉ định id để thực thi, Maven sẽ hoàn toàn làm điều đó (theo cách mà bạn không mong đợi bằng trực giác).

Sau khi đăng bài tìm thấy nó đã có trong stackoverflow: Trong một dự án đa mô-đun Maven, làm cách nào tôi có thể vô hiệu hóa một plugin trong một đứa trẻ?


1
Đối với bản ghi: ID thực thi mặc định tuân theo các quy tắc đơn giản được nêu trong câu trả lời này: stackoverflow.com/a/34599117/7641
Jens Bannmann

2
Điều đáng chú ý là giải pháp này thực sự vô hiệu hóa (như OP yêu cầu) plugin (đối với ID thực thi đã cho) thay vì dựa vào tùy chọn "bỏ qua" dành riêng cho plugin.
Zero3

3

Tôi biết chủ đề này thực sự cũ nhưng giải pháp từ @Ivan Bondarenko đã giúp tôi trong tình huống của mình.

Tôi đã có những điều sau đây trong của tôi 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>

Những gì tôi muốn, là vô hiệu hóa việc thực hiện generate-citrus-warcho một hồ sơ cụ thể và đây là giải pháp:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.