2012-05-07 27 views
172

Đây là một đoạn tệp pom của tôi.Maven: PluginManagement là gì?

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

Tuy nhiên, khi tôi cố gắng kèm theo nó vào thẻ "pluginManagement", các maven-dependency-plugin dừng làm việc khi tôi khởi động mục tiêu install. Tại sao thẻ "pluginManagement" thay đổi hành vi xây dựng? Hoặc tôi có nên sử dụng một mục tiêu hoặc tùy chọn khác không?

Trả lời

222

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

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

trong xây dựng của bạn, bởi vì pluginManagement chỉ là một cách để chia sẻ cùng 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 Maven:

pluginManagement: là một yếu tố được xem cùng plugins bên. Quản lý Plugin chứa các phần tử plugin theo cùng một cách, ngoại trừ việc thay vì cấu hình thông tin plugin cho dự án xây dựng cụ thể này, nó được thiết kế để cấu hình các dự án xây dựng kế thừa từ bản dựng 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ử plugins ở trẻ em. Các trẻ em có mọi quyền ghi đè các định nghĩa pluginManagement.

3

pluginQuản lý: là phần tử được xem cùng với các plugin phụ. Quản lý Plugin chứa các phần tử plugin theo cùng một cách, ngoại trừ việc thay vì cấu hình thông tin plugin cho dự án xây dựng cụ thể này, nó được thiết kế để cấu hình các dự án xây dựng kế thừa từ bản dựng 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ử plugins ở trẻ em. Các trẻ em có mọi quyền ghi đè các định nghĩa pluginManagement.

Từ http://maven.apache.org/pom.html#Plugin%5FManagement

sao chép từ:

Maven2 - problem with pluginManagement and parent-child relationship

26

Bạn sử dụng pluginManagement trong pom cha mẹ để định cấu hình trong trường hợp bất kỳ pom con nào muốn sử dụng, nhưng không phải mọi plugin con đều muốn sử dụng nó. Một ví dụ có thể là siêu pom của bạn định nghĩa một số tùy chọn cho plugin Javadoc maven. Không phải mỗi pom con có thể muốn sử dụng Javadoc, vì vậy bạn xác định các giá trị mặc định đó trong phần pluginManagement. Các pom con mà muốn sử dụng các plugin Javadoc, chỉ cần định nghĩa một phần plugin và sẽ kế thừa cấu hình từ định nghĩa pluginManagement trong pom cha mẹ.

+0

Cảm ơn bạn. Tôi chỉ tìm cách trộn các plugin pluginManagement và các 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 http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b#_=_ –

168

Sự khác biệt giữa <pluginManagement/><plugins/> là:

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

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

Bạn không cần phải có <pluginManagement/> trong dự án của mình, nếu đó không phải là POM mẹ. Tuy nhiên, nếu đó là pom cha mẹ, sau đó trong pom của con, 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 nào. Bạn có thể kế thừa nó từ cha mẹ, trừ khi bạn cần điều chỉnh thêm lời gọi của bạn theo nhu cầu của dự án con.

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

  • Các Maven pom.xml tham khảo: Plugins

  • Các Maven pom.xml tham khảo: Quản lý Plugin

+0

Cảm ơn bạn đã trả lời. Tôi cần phải trộn các pluginManagement và plugin plugin (cho maven-dependency-plugin) trên cùng một tệp pom, bởi vì tôi cần phải bỏ qua một lỗi nhỏ của M2E Eclipse IDE plugin. Xem http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b#_=_ –

+7

Cảm ơn! :) Điều này tương tự với '' và ''. Bạn định nghĩa 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 thích) trong phần '' và sau đó trong phần '' bạn chỉ cần định nghĩa 'groupId' và' artifactId'. – carlspring

+0

nếu tôi phải thực thi plugin hai lần, tôi có nên sử dụng pluginmanagement không? –

Các vấn đề liên quan