jacoco maven 生成代码覆盖率报告

Life is short , play more!
本文来自lihao's Blog,转载请注明。

假设我们已经拿到了jacoco.exec 的代码覆盖率数据文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.jacoco</groupId>
  <artifactId>org.jacoco.examples.maven</artifactId>
  <version>0.7.8-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name> code coverage</name>
  <url>http://qa.heika.com</url>

  <dependencies>
  </dependencies>

  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>

  <build>
<!-- 因为这里仅生成代码覆盖率报告,需要制定之前的编译后的output 目录-->
    <outputDirectory>/data/target/</outputDirectory>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.4.201502262128</version>

            <configuration>
                 <dataFile>/tmp/jacoco.exec</dataFile>
<skip>false</skip>
            </configuration>

        <executions>

          <execution>
            <id>default-prepare-agent</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>

          <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>report</goal>
            </goals>
            <configuration>
                <datafile>/tmp/jacoco.exec</datafile>
            </configuration>
          </execution>

          <execution>
            <id>default-check</id>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>

        </executions>
      </plugin>
    </plugins>
  </build>

</project>

执行如下命令开始分析并生成代码覆盖率报告

/opt/app/maven/bin/mvn jacoco:report

 

[[email protected] bin]$ /opt/app/maven/bin/mvn jacoco:report
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building code coverage 0.7.8-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (default-cli) @ org.jacoco.examples.maven ---
[INFO] Analyzed bundle 'code coverage' with 1199 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.085 s
[INFO] Finished at: 2016-12-30T17:24:15+08:00
[INFO] Final Memory: 18M/486M
[INFO] ------------------------------------------------------------------------

 

目前发现的问题,是

 

[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.7.4.201502262128:report 
(default-cli) on project org.jacoco.examples.maven: An error has occurred in JaCoCo Test report generation. 
Error while creating report: Error while analyzing class 
/data/target/[email protected]/lib/[email protected]/ctc/wstx/api/CommonConfig.class.
 Can't add different class with same name: com/ctc/wstx/api/CommonConfig -> [Help 1]

此问题暂时未解决。 从字面意思是应该此class有重复的存在,导致分析时出现错误。 但是为什么会重复呢? 此处实际不应该重复。  当前绕过该问题的是, 因为三方的jar的代码不需要分析。 所以这里直接把所有三方的jar从 /data/target 里进行了删除,只保留自己的代码jar包和 classes文件。  这样处理后可以正确分析并产出代码覆盖率报告。

至于重复的原因,需要进一步去分析。 (备注,笔者此处用on the fly 的方式【即 javaagent的方式】 产生的代码覆盖数据)


发表评论

电子邮件地址不会被公开。 必填项已用*标注