我是maven的新手,我们的项目有几个模块。我的目标是为整个项目(包含所有模块)生成一个覆盖率报告。下面是我们基于项目的POM.xml
的粗略骨架<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>1.0.0</modelVersion>
<groupId>com.xx.test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>test</name>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
<module>module4</module>
<module>module5</module>
</modules>
<build>
.
.
.
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<version>1.0-alpha-3</version>
</plugin>
</plugins>
</reporting>
</project>
如上所示,我添加了emma插件并执行以下内容:mvn emma:emma 这将为名为“target”的目录下的每个模块生成单独的覆盖率报告。有没有办法可以将所有这些报告整合到一个报告中? 任何指针..?
答案 0 :(得分:2)
以下是实现所需结果的方法
将JaCoCo插件添加到父pom.xml中,以便所有项目都可以生成覆盖率报告。
创建新模块'coverage'以附加Jacoco插件的所有结果......这只是一次性事情。
在此新模块的pom.xml中,插入所需的插件以加入所有覆盖信息 一个。定义所有类,源,生成源等所有属性,因为JaCoCo报告插件需要您设置构建目录,类目录,源目录或生成源目录的位置 湾我们正在使用Maven的ANT任务。 JaCoCo Ant任务将合并来自多个JaCoCo文件结果的结果
现在从父pom.xml运行:mvn clean install
最后从'coverage'pom.xml运行:mvn clean install 一个。这将在maven中运行ANT报告任务,该任务将获取所有模块的所有生成的'jacoco.exec'文件,合并结果并生成报告。 以下是可以在maven中运行的ANT报告目标
<?xml version="1.0" encoding="UTF-8" ?>
<project name="maven-antrun-" default="main" >
<target name="main">
<echo message="Generating JaCoCo Reports"/>
<taskdef name="report" classname="org.jacoco.ant.ReportTask">
<classpath path="./target/jacoco-jars/org.jacoco.ant.jar"/>
</taskdef>
<mkdir dir="./target/coverage-report"/>
<report>
<executiondata>
<fileset dir="../module1/target">
<include name="jacoco.exec"/>
</fileset>
<fileset dir="../module2/target">
<include name="jacoco.exec"/>
</fileset>
</executiondata>
<structure name="Project Code Coverage">
<group name="project">
<classfiles>
<fileset dir="../module1/target/classes"/>
<fileset dir="../module2/target/classes"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="../module1/src/main/java"/>
<fileset dir="../module2/src/main/java"/>
</sourcefiles>
</group>
</structure>
<html destdir="./target/coverage-report/html"/>
<xml destfile="./target/coverage-report/coverage-report.xml"/>
<csv destfile="./target/coverage-report/coverage-report.csv"/>
</report>
</target>
</project>
答案 1 :(得分:0)
对于ant报告任务中的多个子模块,有没有办法一般地执行此操作?指定确切的目录可以正常工作,但不能** dirset引用。这没关系:
<classfiles>
<dirset dir="${basedir}">
<include name="module1/target/classes"/>
<include name="module2/target/classes"/>
OR
<dirset dir="">
<include name="module1/target/classes"/>
<include name="module2/target/classes"/>
OR
<dirset dir="" includes="module1/target/classes,module2/target/classes"/>
这些不起作用(0个类,或者在创建报告时出现错误&#39;没有进一步的详细信息):
<dirset dir="">
<include name="**/target/classes"/>
OR
<dirset dir="${basedir}">
<include name="**/target/classes"/>
OR
<dirset dir="" includes="**/target/classes"/>
OR
<dirset dir="${basedir}" includes="**/target/classes"/>
有趣的是,sourcefile **引用生成HTML源链接OK,我认为它与classfiles完全相同:
<sourcefiles>
<dirset dir="" includes="**/src/main/java"/>
这不起作用:
<sourcefiles>
<dirset dir="${basedir}" includes="**/src/main/java"/>