Maven Jenkins Sonaqube插件多模块代码覆盖率未显示
因此,我们有一个基于Spring Boot maven的项目,我们将其分为多个模块,这些模块在单元测试和Jenkins中都可以很好地工作,但Sonar中根本没有显示覆盖范围 这是我们应用程序的结构:Maven Jenkins Sonaqube插件多模块代码覆盖率未显示,maven,jenkins,sonarqube,jenkins-plugins,sonarqube-scan,Maven,Jenkins,Sonarqube,Jenkins Plugins,Sonarqube Scan,因此,我们有一个基于Spring Boot maven的项目,我们将其分为多个模块,这些模块在单元测试和Jenkins中都可以很好地工作,但Sonar中根本没有显示覆盖范围 这是我们应用程序的结构: ApplicationRoot -SharedCommonModule --main ---java -----com...(SomeModule.java) --test ----com....(SomeModuleTest.java) -ApplicationModule --main ---j
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>
我们已经研究并尝试从多个示例中将其整合在一起,但似乎没有任何效果-我们得到的最接近的结果是,Sonar显示了一些覆盖率,而一些类将显示0%的覆盖率,尽管我们确信我们有使用这些类的UTs(通过IntelliJ测试)。
因此,如果没有上面添加的属性
和构建
xml部分,我们将得到部分覆盖,仅适用于applicationModule,我认为所有报告的未覆盖类都属于SharedCommonModule
编辑:我想澄清一下,当在IntelliJ coverage tool中加载时,组合的jacoco.exec文件确实显示了类的覆盖率,但Sonar在其报告中没有显示非常相同的类的覆盖率(仅当我删除父pom中的build
和properties
xml元素时才会生成)
请帮助:)您有Maven项目,因此应该开始使用。 它足够聪明,可以为您生成所有参数 如果删除:
${project.basedir}/./target/jacoco.exec
${sonar.jacoco.reportPath}
${sonar.jacoco.reportPath}
- Jenkins Sonaqube插件配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.org.Application</mainClass>
</configuration>
</plugin>
</plugins>
</build>
<name>ApplicationModule</name>
<properties>
<sonar.sources>src/main</sonar.sources>
<sonar.tests>src/test</sonar.tests>
<sonar.projectKey>com.Application</sonar.projectKey>
</properties>
<name>SharedCommonModule</name>
之后,您将看到丢失的覆盖率数据
顺便说一句,不建议为Maven项目设置
sonar.projectKey
。我将其设置为相同的值,因此您的项目将可以在相同的链接下访问
<name>ApplicationModule</name>
<properties>
<sonar.sources>src/main</sonar.sources>
<sonar.tests>src/test</sonar.tests>
<sonar.projectKey>com.Application</sonar.projectKey>
</properties>
<name>SharedCommonModule</name>
<name>ApplicationModule</name>
mvn sonar:sonar -Dsonar.projectVersion="1.0.0.${BUILD_NUMBER}"