jacoco maven 生成代码覆盖率报告
Posted On 2016年10月27日
假设我们已经拿到了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
[tomcat@localhost 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/heika-mobile-1.0-SNAPSHOT.war@WEB-INF/lib/wstx-asl-3.2.1.jar@com/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的方式】 产生的代码覆盖数据)
此篇文章已被阅读5312 次