我有一个 Java Multi maven 项目,我为每个子模块配置了 Jacoco maven 插件,以排除我不需要覆盖率报告的文件。 我虽然成功了,因为我没有看到我在 jacoco 生成的 html 报告中排除的这些文件。 我假设这些类文件已从 jacoco.exec 文件中排除。 现在,我在 SonarQube 中使用这些积累的 jacoco.exec 文件,并且看到了所有子模块的覆盖范围,但是当我输入类详细信息时,我再次看到了我定义要排除的类。 因此,我必须使用 sonar.exclusions 属性再次定义这些排除项,以免在声纳中看到它们。
对于雅可可:
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*JavaProjectApiModule.class</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
对于 Sonar,我在父 pom.xml 的属性部分中配置:
<sonar.exclusions>
**/JavaProjectApiAModule.java
</sonar.exclusions>
我想一旦我使用 jacoco 配置排除它们,它们将不会被添加到 jacoco.exec 文件中,进而不会显示在声纳中。 但现在看来我必须维护 jacoco 和声纳配置的排除,如果来自不同模块的类会变得一团糟......
我在这里遗漏了什么吗?是这样吗?保持 jacoco 与声纳分离的排除?
提前致谢!
sonar.exclusions
参数定义扫描仪应忽略哪些文件。这意味着这些文件不会显示在 SonarQube 中。
JaCoCo 代理在测试执行期间会跳过从 JaCoCo 报告中排除的文件。
当扫描仪扫描 JaCoCo 报告中未包含的文件时,它们会显示在 SonarQube 中,但没有代码覆盖率信息。当扫描仪忽略文件(它们的路径匹配
sonar.exclusions
)时,它们不会显示在 SonarQube 中 - 无论它们是否包含在 JaCoCo 报告中。
在你的pom文件中你可以定义
<sonar.exclusions>**/JavaProjectApiAModule*</sonar.exclusions>
并在你的 jacoco 中使用它
<configuration>
<excludes>${sonar.exclusions}</excludes>
</configuration>
只需确保声纳和 jacoco 都能理解
sonar.exclusions
中使用的语法即可。