对于Maven多模块项目,我可以通过Jacoco Maven插件报告代码覆盖率。我知道两种工作方法。我在下面描述的第一种方法。第二种方法是将 Maven 模块的所有 jacoco 结果附加到项目根目录的 1 个 jacoco.exec 文件中。
在这两种方法中,我都必须在每个模块的pom.xml中添加一个Jacoco插件。此外,我还必须在单元和/或集成测试插件中添加几行。我知道我可以使用父pom来缩短代码。
问题:我真的需要将jacoco插件(以及修改后的surefire/failsaves插件(添加到每个模块的pom.xml文件中吗? 是否可以在项目文件夹中仅在项目根目录中定义一次jacoco插件?
好的,详细说明方法1,这就是我使用的。
项目- 根目录中的声纳项目属性文件。
sonar.projectKey=projectKey
sonar.sources=all source files
sonar.exclusions=someFolder
sonar.java.coveragePlugin=jacoco sonar.jacoco.reportPaths=module1/target/jacoco.exec,module2/target/jacoco.exsonar.projectName
=projectName
sonar.java.binaries=*/target/classes
Maven的基本部分是:
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin-version}</version>
<configuration>
<propertyName>jacoco.agent.argLine</propertyName>
</configuration>
<executions>
<execution>
<id>jacoco-init</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.plugin.version}</version>
<configuration>
<argLine>${jacoco.agent.argLine}</argLine>
<excludes>
<exclude>**/integration/**/*.java</exclude>
<exclude>**/*$*.*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${failsafe.plugin.version}</version>
<configuration>
<argLine>${jacoco.agent.argLine}</argLine>
<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
</configuration>
<executions>
...
</executions>
</plugin>
</plugins>
正如@Maxence Lecointe所提到的,您可以将所有插件添加到父pom中。将插件放在<依赖项>部分,而不是放在<依赖项管理>部分中。依赖项管理>依赖项>
在扫描了许多解决方案后,我创建了一个简单但完整的Jacoco演示项目,显示:
- 多模块项目
- 单元测试(通过 mvn 全新安装(
- 集成测试(通过 mvn 全新安装 -P 集成测试(
- Jacoco - 测试覆盖率(聚合数据文件和聚合报告(
- 查找错误 - 代码质量
享受 sipmle 演示项目。