2016-03-30 17 views
10

Chúng tôi có một dự án đa mô-đun Maven bao gồm một phụ huynh (HelloWorld) và các trẻ khác nhau (HelloWorldServices và HelloWorldPresentation) và sử dụng Jenkins để xây dựng.JaCoCo với Maven - thiếu tệp dữ liệu thực thi

Các lỗi sau khi chạy thử nghiệm thành công là

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (default-cli) @ HelloWorldServices --- 
[INFO] Skipping JaCoCo execution due to missing execution data file:/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec 

Các dòng trước khi nó nói

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:prepare-agent (default-cli) @ HelloWorldServices --- 
[INFO] argLine set to -javaagent:/var/lib/jenkins/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.201602180812/org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec 

Đây là cách tôi xác định các plugin mẹ pom JaCoCo:

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.6.201602180812</version> 
    <configuration> 
     <destfile>${project.artifactId}/target/jacoco.exec</destfile> 
     <datafile>${project.artifactId}/target/jacoco.exec</datafile> 
    </configuration> 

    <executions> 
     <execution> 
      <id>jacoco-initialize</id> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>jacoco-site</id> 
      <phase>package</phase> 
      <goals> 
       <goal>report</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Trong không có pom tôi đã đề cập một cách rõ ràng chắc chắn. Tôi cũng đã thử những gì bạn tìm thấy ở khắp mọi nơi để đặt argLine trong cấu hình nhưng tất cả đều có cùng kết quả. Tập tin JaCoCo .exec chưa bao giờ được tạo ra, bất kể tôi làm gì. Đối với các mục tiêu, tôi sử dụng

mvn clean install jacoco:prepare-agent jacoco:report 

Vì khi tôi bỏ qua mục tiêu jacoco, nó thậm chí không hiển thị thông báo INFO.

+1

thử 'mvn clean jacoco: chuẩn bị đại lý cài đặt' thay vì (đại lý giữa hai giai đoạn) –

Trả lời

18

Bạn không nên gọi đại lý sau khi cài đặt giai đoạn nhưng trước đó, nên thay vì gọi:

mvn clean install jacoco:prepare-agent jacoco:report 

Bạn nên gọi

mvn clean jacoco:prepare-agent install jacoco:report 

Lý do chính là: các đại lý sẽ không tham gia vào vòng đời xây dựng, giai đoạn test sẽ được thực hiện như một phần của giai đoạn install, sau đó Maven sẽ thực thi tác nhân theo lời gọi dòng lệnh, nhưng sẽ quá muộn.


Bạn nên có lẽ cũng thay đổi cấu hình cắm ở trên để:

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.6.201602180812</version> 
    <executions> 
     <execution> 
      <id>jacoco-initialize</id> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>jacoco-site</id> 
      <phase>package</phase> 
      <goals> 
       <goal>report</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Lưu ý: Tôi đã gỡ bỏ phần cấu hình, bởi vì nó đã thực sự trỏ đến giá trị mặc định. Hơn nữa, các phần tử XML có phân biệt chữ hoa chữ thường ở đây, do đó, phần tử datafile của bạn đã bị bỏ qua, thay vào đó nó phải là dataFile. Điều tương tự cũng áp dụng cho destFile.

Mục tiêu prepare-agent đã được sử dụng ${project.build.directory}/jacoco.exec như giá trị mặc định destFile, cùng áp dụng cho các giá trị dataFile cho mục tiêu report. Lý do chính cho thay đổi này là xây dựng linh hoạt và tiêu chuẩn hơn, không dựa trên artifactId làm tên dự án (mặc định, nhưng vẫn không bắt buộc) và sử dụng thuộc tính chung chung hơn ${project.build.directory} thay vì trỏ trực tiếp tại target.


lưu ý cuối cùng: hãy chắc chắn để cấu hình các hành Jacoco Plugin trong phần build/plugins và không build/pluginManagement/plugins phần. Phần pluginManagement có nghĩa là quản trị và hài hòa hóa phổ biến các phiên bản hoặc cấu hình, nhưng sẽ là bỏ qua nếu plugin tương ứng sẽ không được khai báo theo build/plugins.
Theo official Maven POM reference

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ử bổ sung ở trẻ em. Trẻ em có mọi quyền ghi đè lên các định nghĩa pluginManagement.

(lưu ý: bold là của tôi)

+0

Tôi cần làm gì để thực hiện tác vụ này khi chỉ gọi' mvn install'? Nếu tôi không rõ ràng gọi các mục tiêu của jacoco, chúng sẽ không bị xử tử. – dasLort

+0

@dasLort bạn đang sử dụng phiên bản Maven nào? Tôi không thể tái tạo vấn đề của bạn với một dự án mẫu đa mô-đun, tôi không nhận được bất kỳ cảnh báo bỏ qua nào và nhận được báo cáo của jacoco –

+0

Maven 3.3.9 và (Jenkins) Maven Integration Plugin 2.12.1. Vì vậy, bạn nói rằng bạn có thể 'mvn install' và nó sẽ với cấu hình trên gọi jacoco? – dasLort

2

Tôi nghĩ rằng "destfile" và "datafile" là trường hợp nhạy cảm vì vậy hãy thử thay thế chúng bằng "destFile" và "datafile", có thể nó sẽ làm việc:)

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