2009-07-26 36 views
5

Khi chạy Maven xây dựng trên máy chủ CI, tôi tạo trang web để xuất bản tài liệu và báo cáo, và cũng triển khai tạo tác phẩm cho kho lưu trữ ảnh chụp để sử dụng bởi các dự án khác. Để làm điều này tôi chạy được các mục tiêu sau đây:Mục tiêu trang web/triển khai kết hợp cho Maven

mvn clean site deploy 

này có nghĩa là kiểm tra đơn vị đang chạy hai lần, một lần cho vòng đời trang web và một lần cho vòng đời triển khai. Nếu tôi định cấu hình mục tiêu trang web bị ràng buộc trong vòng đời chuẩn thì các thử nghiệm vẫn chạy hai lần, việc chạy mục tiêu trang web luôn khiến các thử nghiệm được chạy vì chú thích @requiresDependencyResolution kiểm tra. Điều này là tốt nếu bạn chỉ tạo trang web, nhưng trong bối cảnh triển khai nó làm tăng đáng kể thời gian xây dựng không có lợi ích.

Tôi có giải pháp liên quan đến việc sao chép SiteMojo (và cha mẹ bắt buộc) vào một plugin mới và xóa chú thích @requiresDependencyResolution kiểm tra khỏi bản sao.

Mojo được sửa đổi này sẽ tạo báo cáo mà không buộc chạy thử nghiệm một lần nữa nhưng tôi muốn có giải pháp không liên quan đến việc hack plugin trang web. Có cách nào để loại bỏ chú thích requireDependencyResolution không?

Trả lời

1

Cách tiếp cận hiện tại của tôi là tạo plugin mới với các bản sao của các loại có liên quan từ plugin maven-site. Các loại này giống hệt với các phiên bản tiêu chuẩn ngoại trừ việc thay đổi tên loại, tên mục tiêu và loại bỏ chú thích @requiresDependencyResolution kiểm tra.

Các loại sao chép là:

org.apache.maven.plugins.site.AbstractSiteMojo 
org.apache.maven.plugins.site.AbstractSiteRenderingMojo 

Các mojos mẹ được yêu cầu để Maven có thể xử lý các chú thích javadoc dựa trên (điều này không nên được yêu cầu cho Maven 2.2.0+).

Hai thứ này được sao chép dưới dạng SiteOnlyMojo và SiteJarOnlyMojo tương ứng, SiteJarOnlyMojo được đổi thành kế thừa từ SiteOnlyMojo. Nếu không, thay đổi duy nhất là thay đổi tên mục tiêu và xóa chú thích.

Vì vậy SiteOnlyMojo có:

* @goal site 
* @requiresDependencyResolution test 

đổi thành:

* @goal site-only 

và SiteJarOnlyMojo có:

* @goal jar 
* @phase package 

đổi thành:

* @goal jar-only 
* @phase package 

Các loại này được khai báo trong dự án maven-plugin với artifactId maven-site-only-plugin với phụ thuộc được khai báo trên plugin trang web thích hợp.

Để sử dụng điều này, tôi xác định cấu hình (Tôi không muốn báo cáo chạy trên mọi lần thực thi, chỉ khi -Psite được khai báo trên dòng lệnh) và liên kết nó với pha chuẩn bị gói (trước 2.1 .0, bạn phải liên kết nó với gói gói thay thế).

<profile> 
    <id>site</id> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-site-only-plugin</artifactId> 
     <version>1.0.0</version> 
     <executions> 
      <execution> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>jar-only</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 
3

Tôi ngạc nhiên làm việc này - thẻ @requiresDependencyResolution test không thực sự kích hoạt các cuộc thử nghiệm đang được xây dựng - đó nên là một trong những báo cáo mà bạn đã bao gồm. Thông thường, tôi khuyên bạn nên chạy trang web và xây dựng trong các hành động Maven riêng biệt trong CI để bạn có thể nhận phản hồi nhanh về việc xây dựng và xuất bản trang web mới nhất chỉ khi thành công.

Một giải pháp thay thế khác là chạy nó là mvn clean deploy site và chọn report-only mojo cho surefire-report-maven-plugin (đây thường là báo cáo đang chạy thử nghiệm lại). Điều này sẽ sử dụng kết quả kiểm tra trước đó. Tất nhiên, một lựa chọn khác là vô hiệu hóa báo cáo đó hoàn toàn, vì bạn có khả năng nhận được các kết quả đó từ một nguồn khác, chẳng hạn như máy chủ CI của bạn.

0
<build> 
    <pluginManagement> 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-site-plugin</artifactId> 
       <version>3.2</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>site</goal> 
          <goal>deploy</goal> 
         </goals> 
         <phase>deploy</phase> 
        </execution> 
       </executions> 
      </plugin> 
      ... 
     </plugins> 
    </pluginManagement> 
</build> 

Thao tác này sẽ tự động thực thi tác vụ trang khi thực hiện lệnh 'mvn deploy', cũng như đảm bảo bộ thử nghiệm chỉ được thực hiện một lần.

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