PluginQuản lý trong pom.xml của Maven là gì?


266

Đây là một đoạn của tập tin pom của tôi.

....
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

Tôi sử dụng nó thành công với lệnh

mvn install

Nhưng, khi tôi cố gắng đưa nó vào thẻ "Trình quản lý plugin", các maven-dependency-pluginđiểm dừng hoạt động khi tôi khởi chạy installmục tiêu. Tại sao thẻ "pluginQuản lý" thay đổi hành vi xây dựng? Hoặc tôi nên sử dụng một mục tiêu hoặc tùy chọn khác?

Câu trả lời:


299

Bạn vẫn cần thêm

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>

trong bản dựng của bạn, bởi vì pluginManagementchỉ là một cách để chia sẻ cùng một cấu hình plugin trên tất cả các mô-đun dự án của bạn.

Từ tài liệu của Maven:

pluginQuản lý : là một yếu tố được nhìn thấy dọc theo các plugin bên. Quản lý plugin chứa các thành phần plugin theo cách tương tự, ngoại trừ việc định cấu hình thông tin plugin cho bản dựng dự án cụ thể này, nó được dự định cấu hình các bản dựng dự án kế thừa từ bản này. Tuy nhiên, điều này chỉ cấu hình các plugin thực sự được tham chiếu trong phần tử plugin ở trẻ em. Trẻ em có mọi quyền để ghi đè các định nghĩa quản lý plugin.


266

Sự khác biệt giữa <pluginManagement/><plugins/>là một <plugin/>dưới:

  • <pluginManagement/>xác định cài đặt cho các plugin sẽ được kế thừa bởi các mô-đun trong bản dựng của bạn. Điều này rất tốt cho các trường hợp bạn có tệp pom cha.

  • <plugins/>là một lời mời thực sự của plugin. Nó có thể hoặc không thể được thừa kế từ a <pluginManagement/>.

Bạn không cần phải có một <pluginManagement/>dự án của mình, nếu đó không phải là POM gốc. Tuy nhiên, nếu đó là pom cha mẹ, thì trong pom của trẻ, bạn cần phải có một tuyên bố như:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

Lưu ý cách bạn không xác định bất kỳ cấu hình. Bạn có thể thừa kế nó từ cha mẹ, trừ khi bạn cần điều chỉnh thêm lời mời của mình theo nhu cầu của dự án con.

Để biết thêm thông tin cụ thể, bạn có thể kiểm tra:


Cảm ơn bạn đã trả lời của bạn. Tôi cần trộn thẻ pluginQuản lý và thẻ plugin (đối với plugin phụ thuộc maven) trên cùng một tệp pom, vì tôi cần bỏ qua một lỗi nhỏ của plugin M2E Eclipse IDE. Xem stackoverflow.com/questions/8706017/
Andrea Borgogelli Avveduti

7
Cảm ơn! :) Điều này là giống nhau cho <dependency/><dependencyManagement/>. Bạn xác định các phụ thuộc (cùng với các phiên bản và phạm vi của chúng, nếu bạn muốn) trong <dependencyManagement/>phần và sau đó trong <dependencies/>phần bạn chỉ cần xác định groupIdartifactId.
carlspring

1
Nếu tôi phải thực thi một plugin hai lần, tôi có nên sử dụng plugin không?
Kalpesh Soni

@KalpeshSoni: Điều đó tùy thuộc - bạn có thể muốn có cấu hình chung giữa hai lần thực thi mà bạn không muốn phải xác định lại.
carlspring

39

Bạn sử dụng pluginManagementtrong một parent pomđể cấu hình nó trong trường hợp bất kỳ child pommuốn sử dụng nó, nhưng không phải mọi plugin con đều muốn sử dụng nó. Một ví dụ có thể là việc bạn super pomxác định một số tùy chọn cho plugin maven Javadoc.

Không phải mỗi người child pomcó thể muốn sử dụng Javadoc, vì vậy bạn xác định các mặc định đó trong một pluginManagementphần. Người con muốn sử dụng plugin Javadoc, chỉ cần xác định phần plugin và sẽ kế thừa cấu hình từ pluginManagementđịnh nghĩa trong parent pom.


Cảm ơn bạn. Tôi chỉ tìm cách trộn các plugin Trình quản lý và thẻ plugin trên cùng một tệp pom vì tôi cần bỏ qua một lỗi nhỏ của plugin M2E cho Eclipse. Xem stackoverflow.com/questions/8706017/ từ
Andrea Borgogelli Avveduti

3

pluginQuản lý: là một yếu tố được nhìn thấy dọc theo các plugin bên. Quản lý plugin chứa các thành phần plugin theo cách tương tự, ngoại trừ việc định cấu hình thông tin plugin cho bản dựng dự án cụ thể này, nó được dự định cấu hình các bản dựng dự án kế thừa từ bản này. Tuy nhiên, điều này chỉ cấu hình các plugin thực sự được tham chiếu trong phần tử plugin ở trẻ em. Trẻ em có mọi quyền để ghi đè các định nghĩa quản lý plugin.

Từ http://maven.apache.org/pom.html#Plugin%5FQuản lý

Được sao chép từ :

Maven2 - vấn đề với pluginQuản lý và mối quan hệ cha-con

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.