Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven Jenkins Sonaqube插件多模块代码覆盖率未显示_Maven_Jenkins_Sonarqube_Jenkins Plugins_Sonarqube Scan - Fatal编程技术网

Maven Jenkins Sonaqube插件多模块代码覆盖率未显示

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

因此,我们有一个基于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>
我们已经研究并尝试从多个示例中将其整合在一起,但似乎没有任何效果-我们得到的最接近的结果是,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插件配置
添加到父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>
<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}"