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

Posted

技术标签:

【中文标题】多个 Maven 模块声纳代码覆盖率在 sonarqube 中显示为零【英文标题】:multiple maven modules sonar code coverage is showing zero % on sonar qube 【发布时间】:2021-09-10 09:26:05 【问题描述】:

我正在使用 6.7.6 和 maven 3.3.9 的声纳版本我在我的 Jenkins 中具有以下配置,它按照路径下方的预期生成 jacoco 报告和测试用例报告。但我看到 0% 的代码覆盖率在 sonarqube 中,有人可以帮我吗?

sonar.language=java
sonar.java.coveragePlugin=jacoco
sonar.junit.reportPaths=ABC-1/target/surefire-reports, ABC-2/target/surefire-reports, ABC-3/target/surefire-reports, ABC-4/target/surefire-reports, ABC-5/target/surefire-reports, ABC-6/target/surefire-reports
sonar.jacoco.reportPaths=ABC-1/target/jacoco.exec, ABC-2/target/jacoco.exe, ABC-3/target/jacoco.exec, ABC-4/target/jacoco.exec, ABC-5/target/surefire-reports, ABC-6/target/jacoco.exec
sonar.projectKey=abc_Parent
sonar.projectName=abc_Parent
sonar.projectVersion=$POM_VERSION
sonar.java.binaries=ABC-1/target/classes, ABC-2/target/classes, ABC-3/target/classes, ABC-4/target/classes, ABC-5/target/classes, ABC-6/target/classes
sonar.test.exclusions=**/src/test/**
sonar.sources=.

MavenGoal

-Dmaven.test.failure.ignore=true -U clean org.jacoco:jacoco-maven-plugin:1.1.1:prepare-agent 测试

父POM

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>***</version>
                </plugin>
                <plugin>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>***</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

【问题讨论】:

如果您找到了我们所有问题的答案,请考虑将其标记为已接受。 【参考方案1】:

如您所知,SonarQube does not do the analysis 只是导入结果。

你真的应该 upgrade 到 SQ LTS 8.9.x,这意味着转到 6.7.7,然后是 7.9.6,然后是 8.9.x。

你的覆盖问题是你必须jacoco:prepare-agent,然后运行测试(-DskipTests=false),然后生成jacoco:report,或者因为你是多模块,jacoco:report-aggregate,最后,sonar:sonar

sonar-jacoco 插件然后可以从sonar.coverage.jacoco.xmlReportPaths 位置获取结果。

如果未定义“'sonar.coverage.jacoco.xmlReportPaths”,则默认位置为:

"target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml"

SonarJava 分析器 V 5.12。 deprecated use JaCoCo’s binary format (.exec files)。支持.exec格式JaCoCo Coverage Reports was dropped in SonarQube 8.2

根据sonar-jacoco-plugin-1.1 的发行说明,它现在具有“支持通配符 in sonar.coverage.jacoco.xmlReportPaths”

SonarQube 解释了为什么数字 might not match expectations

【讨论】:

以上是关于多个 Maven 模块声纳代码覆盖率在 sonarqube 中显示为零的主要内容,如果未能解决你的问题,请参考以下文章

声纳分析后未填充代码覆盖率

将 Jacoco 代码覆盖率发布到声纳的命令

使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率

为单元和集成测试生成声纳覆盖率报告

mutiModule maven 项目的综合声纳报告

具有多个项目的声纳