【问题标题】:Jenkins SonarQube plugin Multi Module Code Coverage Not DisplayingJenkins SonarQube 插件多模块代码覆盖率不显示
【发布时间】:2018-12-22 05:06:05
【问题描述】:

所以我们有一个基于 Spring Boot maven 的项目,我们将其拆分为多个模块,这些模块在单元测试和 Jenkins 中都可以正常工作,但在 Sonar 中根本没有显示覆盖范围。

这是我们应用程序的结构:

ApplicationRoot
-SharedCommonModule
--main
---java
-----com...(SomeModule.java)
--test
----com....(SomeModuleTest.java)
-ApplicationModule
--main
---java
-----com...(Application.java)
--test
----com....(ApplicationTest.java)

父pom文件配置:

<properties>
    <!-- Sonar -->
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.language>java</sonar.language>
    <jacoco.destFile>${sonar.jacoco.reportPath}</jacoco.destFile>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.5.201505241946</version>
            <configuration>
                <destFile>${sonar.jacoco.reportPath}</destFile>
                <append>true</append>
            </configuration>
            <executions>
                <execution>
                    <id>agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

SharedCommonModule pom:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

主应用模块 pom 文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.org.Application</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Jenkins SonarQube 插件配置:

sonar.projectKey=com.Application
sonar.projectName=ApplicationModule
sonar.projectVersion=1.0.0.${BUILD_NUMBER}

sonar.sources=src/main
sonar.tests=src/test
sonar.java.binaries=target/classes
sonar.jacoco.reportPaths=target/jacoco.exec

sonar.modules=ApplicationModule,SharedCommonModule

ApplicationModule.sonar.projectName=ApplicationModule
SharedCommonModule.sonar.projectName=SharedCommonModule

我们已经研究并尝试从多个示例中将其组合在一起,但似乎没有任何效果 - 我们得到的最接近的是,Sonar 显示一些覆盖率,而某些类会显示 0% 覆盖率,即使我们肯定知道我们有使用这些类的 UT(通过 IntelliJ 测试)。 因此,如果没有上面添加的propertiesbuild xml 部分,我们会得到部分覆盖,仅适用于ApplicaitonModule,我认为所有报告的未覆盖类都属于SharedCommonModule

编辑:我想澄清一下,组合的 jacoco.exec 文件在 IntelliJ Coverage 工具中加载时确实显示了类的覆盖率,但 Sonar 在其报告中没有显示相同类的覆盖率(仅在我删除时生成父 pom 中的 buildproperties xml 元素)。

请帮忙:)

【问题讨论】:

    标签: maven jenkins sonarqube jenkins-plugins sonarqube-scan


    【解决方案1】:

    您有 Maven 项目,因此您应该开始使用 Sonar Scanner for Maven。 它足够聪明,可以为您生成所有参数。

    如果你删除:

    • <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    • &lt;jacoco.destFile&gt;${sonar.jacoco.reportPath}&lt;/jacoco.destFile&gt;
    • &lt;destFile&gt;${sonar.jacoco.reportPath}&lt;/destFile&gt;
    • Jenkins SonarQube 插件配置

    添加到父 pom 文件:

    <name>ApplicationModule</name>
    <properties>
        <sonar.sources>src/main</sonar.sources>
        <sonar.tests>src/test</sonar.tests>
        <sonar.projectKey>com.Application</sonar.projectKey>
    </properties>
    

    添加到 SharedCommonModule pom 文件:

    <name>SharedCommonModule</name>
    

    添加到 ApplicationModule.pom 文件:

    <name>ApplicationModule</name>
    

    最后执行:

    mvn sonar:sonar -Dsonar.projectVersion="1.0.0.${BUILD_NUMBER}"
    

    之后,您应该会看到缺失的覆盖率数据。


    顺便说一句。不建议为 Maven 项目设置 sonar.projectKey。我将其设置为相同的值,因此您的项目将可以通过相同的链接访问。

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 2017-05-31
      • 2016-04-08
      • 2023-04-05
      • 2017-03-06
      • 2020-08-07
      • 2019-08-12
      • 2020-08-13
      • 2017-10-24
      相关资源
      最近更新 更多