当前位置:  开发笔记 > 编程语言 > 正文

SonarQube:与JaCoCo的多模块gradle项目的覆盖范围不完整

如何解决《SonarQube:与JaCoCo的多模块gradle项目的覆盖范围不完整》经验,为你挑选了1个好方法。

我正在构建一个已经在分析我的Java 8/Gradle 3.3项目的SonarQube 6.2服务器.将JaCoCo添加到多模块gradle项目时,我意识到SonarQube正在"按模块"测量代码覆盖率:

如果一个类位于模块中A并且该类的测试位于模块中B,则SonarQube会指出该类未被覆盖.

我想测量所有模块的代码覆盖率,而不是基于每个模块.我该如何实现这一目标?

有很多类似的问题,但没有有用的答案,虽然这种情况对我来说似乎很常见.例如Jenkins默认情况下这样做.

我决定在github上构建一个蓝图来澄清这个问题.

主要build.gradle包括

plugins { id "org.sonarqube" version "2.2.1" }

subprojects {
    apply plugin: 'java'
    apply plugin: 'jacoco'

    repositories { mavenCentral() }
    dependencies { testCompile "junit:junit:4.12" }
}

modA/build.gradle是空的.

它包括3类:TestedInModA,TestedInModATestTestedViaModB.

modB/build.gradle只是声明一个依赖modA:

dependencies { compile project(':modA') }

它只包含一个类:TestedViaModBTest,测试TestedViaModB位于的类modA.

我的(私有)Jenkins实例显示了包括的两个类的100%覆盖率,而SonarQube说只有类TestedInModA(在其自己的模块中测试)被覆盖.

如何修改构建过程以查看SonarQube中的"跨模块覆盖"?

我很想更新我的项目,以便将来访问此问题的访问者可以找到一个有效的例子.

我的工作解决方案(感谢@Godin)

    将以下内容添加到subprojects闭包中

    tasks.withType(Test) {
        // redirect all coverage data to one file
        // ... needs cleaning the data prior to the build to avoid accumulating coverage data of different runs.
        // see `task cleanJacoco`
        jacoco {
            destinationFile = file("$rootProject.buildDir/jacoco/test.exec")
        }
    }
    

    task cleanJacoco(dependsOn: 'clean') {  delete "$buildDir/jacoco" }
    

外面subprojects闭合.



1> Godin..:

当您执行建立JaCoCo摇篮插件会产生modA/build/jacoco/test.execmodB/build/jacoco/test.exe包含有关在测试执行信息modAmodB分别.SonarQube分别对模块进行分析,因此在分析modA文件TestedViaModB时只能看到它modA/build/jacoco/test.exec.

跨越边界的最常见技巧 - 将所有覆盖信息收集到单个位置.这可以使用JaCoCo Gralde插件完成

通过更改位置 - 请参阅destinationFiledestPath(因为信息附加到exec文件,不要忘记在构建之前删除此单个位置,否则它将累积来自不同构建的信息,而不仅仅是来自不同的模块),

通过将所有文件合并为单个文件 - 请参阅JacocoMerge任务.然后将此单个位置指定为SonarQube sonar.jacoco.reportPath.

另一个技巧:SonarQube 6.2 with Java Plugin 4.4支持sonar.jacoco.reportPaths允许指定多个位置的属性.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有