对于Maven多模块项目,我可以通过Jacoco Maven插件报告代码覆盖率。我知道有两种工作方法。我在下面描述的第一种方法。第二种方法是将Maven模块的所有jacoco结果附加到项目根目录中的1个jacoco.exec文件中。
在这两种方法中,我都必须在每个模块的pom.xml中添加一个Jacoco插件。另外,我必须在单元和/或集成测试插件中添加几行。我知道我可以使用父pom来缩短代码。
问题:我真的需要将jacoco插件(并修改了surefire / failsave插件)添加到每个模块的pom.xml文件中吗? 是否可以在项目文件夹中仅在项目根目录中定义jacoco插件一次?
好的,详细说明方法1,这就是我使用的方法。
sonar.projectKey=projectKey
sonar.sources=all source files
sonar.exclusions=someFolders
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>
答案 0 :(得分:1)
如@Maxence Lecointe所述,您可以将所有插件添加到父pom中。将插件放在&lt; dependencies&gt;中&lt; dependenciesManagement&gt;中的section和NOT部分。
在扫描了许多解决方案后,我创建了一个简单但完整的 Jacoco 演示项目,显示: