跳过 SonarQube 中模块的代码覆盖率

Posted

技术标签:

【中文标题】跳过 SonarQube 中模块的代码覆盖率【英文标题】:Skip Code Coverage For Modules in SonarQube 【发布时间】:2018-07-17 15:33:22 【问题描述】:

我有一个使用 SonarQube 分析的 Maven 构建的 Java 项目。每个项目都包含几个 Maven 模块,比如说:

org.acme.module - API org.acme.module.demo - 一个演示此模块功能的小型演示应用程序 org.acme.module.doc - 开发者文档 org.acme.module.it - 集成测试

在理想情况下,我想分析所有这些模块的代码质量,但只计算 API 的测试覆盖率。

但是我找不到从代码覆盖中禁用整个项目的方法(sonar.coverage.exclusions 只过滤类名,其中一些模块与 API 共享一个包),所以现在我正在尝试禁用这些来自 Sonar 的模块。

我试过了:

<properties>
    <sonar.skippedModules>org.acme.module.demo,org.acme.module.doc,org.acme.module.it</sonar.skippedModules>
</properties>

这很有效,但工作量很大,因为我有数百个这样的项目。

<properties>
    <sonar.skip>true</sonar.skip>
</properties>

也可以,但我必须对每个子模块进行类似的定义。此外,现在 Sonar 不会分析文件,这显然是不好的。

我宁愿有类似 &lt;excludedModules&gt;*demo*,*doc*,*it*,&lt;excludedModules&gt; 的东西,我可以在父 pom.xml 中定义一次并在所有这些模块中使用。

This answer 状态:

您也可以从声纳管理页面执行此操作,如跳过模块部分 here 中所述。

在我意识到 SonarQube 文档不再包含“跳过模块”部分之前,我非常高兴。或者它被移动了,我就是找不到它。

如何在运行其他 Sonar 测试的同时跳过多个模块中的代码覆盖率分析?

或者如果这不可能,如何以通用方式跳过 Sonar 中的这些模块?

【问题讨论】:

【参考方案1】:

在所有子/子模块 pom 中,您可以添加如下所示的内容,以仅从覆盖率分析中排除该模块中的所有文件。您仍然可以获得这些模块的其余 SonarQube 分析。

 <profiles>
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <sonar.coverage.exclusions>
                **/*.*
            </sonar.coverage.exclusions>
        </properties>
    </profile>
    </profiles>

【讨论】:

【参考方案2】:

以管理员身份登录

转到您的项目,您应该会看到一个管理选项卡。 然后转到分析范围,然后在覆盖范围排除项中添加您的排除项:

src/main/java/org/acme/module/demo/**

【讨论】:

IT 模块与它测试的包具有完全相同的包,所以这不起作用。 按照惯例,您的测试应该在src/test/java 下,而不是在特定模块中。 这不是真的。 src/test/java 是众多约定之一。我们正在使用插件和测试片段,因为这似乎是 Eclipse 开发的标准。

以上是关于跳过 SonarQube 中模块的代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

多个 Maven 模块声纳代码覆盖率在 sonarqube 中显示为零

Jenkins SonarQube 插件多模块代码覆盖率不显示

Sonarqube 覆盖结果模块名称用法

SonarQube + Jacoco - 无法读取 Koin 模块测试覆盖率

Jacoco和Tycho surefire的Eclipse RCP插件代码介绍

Bamboo - SonarQube 多模块 maven 项目跳过子模块