2012-10-02 28 views
7

Tôi đang sử dụng yếu tố pluginManagement trong bố mẹ pom.xml để định cấu hình plugin cho tất cả các con của nó. Ví dụ, tôi có cấu hình như sau:Maven pluginQuản lý cấu hình thừa kế hành vi lạ

<pluginManagement> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <id>copy-artifacts</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>some/where/else</outputDirectory> 
        <resources> 
         <resource> 
          <directory>some/another/resource</directory> 
         </resource> 
        </resources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

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

Các tài liệu chính thức khẳng định rằng một plugin cấu hình trong pluginManagement vẫn phải được thêm vào plugins yếu tố ở trẻ em poms. Thật vậy, nếu tôi loại bỏ điều này từ pom con:

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

sau đó maven-dependency-plugin dừng bắn ở install pha. Tuy nhiên, có vẻ như nó không ảnh hưởng đến một số plugin khác, cụ thể là, maven-resource-plugin. Ngay cả khi tôi không có

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

trong pom con tôi, mục tiêu copy-resources nó vẫn bắn ở install giai đoạn và thực hiện các công việc nó được cấu hình để làm.

Tại sao hành vi này có mặt? Có danh sách các plugin được thừa kế luôn hay không, hoặc có thể tôi đang thiếu thứ gì đó?

+2

Hãy nhìn vào pom hiệu quả để phân tích vấn đề của bạn (thông qua trợ giúp mvn: hiệu quả-pom). – khmarbaise

+0

Cảm ơn bạn, hoàn toàn quên mất nó. Sẽ có một cái nhìn. –

Trả lời

6

Toàn bộ POM không hiển thị; nhưng với hành vi mà bạn mô tả đây là một cái lọ, chiến tranh hay tai, đúng không? Plugin tài nguyên được định nghĩa cho các loại bao bì theo mặc định. Nó bao gồm một thực thi sao chép tài nguyên (như được mô tả bởi @maba).

Vì định nghĩa plugin được bao gồm trong POM con của bạn (mặc dù bạn không đặt nó trực tiếp), Maven kết hợp thực thi được xác định trong phần <pluginManagement> với thực thi do Maven cung cấp.

documentation mô tả các ràng buộc vòng đời mặc định theo loại bao bì. Lưu ý rằng plugin dependency không được đề cập; nhưng resources là; đó là lý do tại sao bạn quan sát sự khác biệt. Chạy với -X sẽ hiển thị các thực thi plugin.

+0

Có, bao bì pom của tôi là bình. Vì vậy, đó là bởi vì 'tài nguyên-plugin' được bao gồm tự động nó cũng tự động kế thừa tất cả cấu hình từ' pluginManagement', phải không? Sau đó, tôi nghĩ, tôi đã tìm ra câu trả lời. Tôi nghĩ rằng đó là một cái gì đó như thế này. Cảm ơn nhiều! –

+1

@VladimirMatveev Có các plugin khác được bao gồm theo mặc định. Một rõ ràng là 'maven-compiler-plugin'. – maba

+1

@VladimirMatveev Tôi đoán bạn có thể tìm thấy các plugin cốt lõi ở đây: [Maven Available Plugins] (http://maven.apache.org/plugins/index.html). – maba

1

Maven luôn sao chép tài nguyên bên trong src/main/resources theo mặc định.

Từ Maven Getting Started Guide:

Các quy tắc đơn giản được sử dụng bởi Maven là thế này: bất kỳ thư mục hoặc tập tin nằm trong thư mục ${basedir}/src/main/resources được đóng gói trong JAR của bạn với cấu trúc chính xác cùng bắt đầu tại căn cứ của JAR.

+0

Tôi biết về 'src/main/resources', nhưng cấu hình của tôi (có lẽ tôi không nên thay thế nó bằng dấu chấm lửng, tôi chỉ nghĩ rằng đó là lãng phí không cần thiết của không gian) sao chép nhiều tệp đến các vị trí khác nhau, và đó là những gì hoạt động mặc dù plugin được xóa khỏi pom của trẻ. Tôi đã cập nhật câu hỏi của mình về vấn đề này. –