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的方式】 产生的代码覆盖数据)
此篇文章已被阅读4801 次