sonarqube不再支持jacoco coverage非xml格式的报告, 只通过sonar.coverage.jacoco.reportXmlPaths支持xml

拜拜、爱过 提交于 2020-03-06 17:22:06

jacoco是一个开源的,目前使用比较普遍的java语言的覆盖率计算工具,它默认生成的是.exec格式的覆盖率报告。sonarqube是做代码静态扫描的平台,它可以将jacoco计算的覆盖率上传到自己的平台上,然后根据指定的规则来做一些分析。sonarqube最新的8.x的版本开始不支持.exec这种格式的报告了(也就是参数sonar.jacoco.reportPaths是不支持的了),jacoco要生成xml格式的报告才能被sonarqube识别(sonar.coverage.jacoco.reportXmlPaths)。

官方文档的说明,https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166 但文档并没有说具体从哪个版本不支持。

 

一、首先来看如何适应sonarqube的改动

下面来看如何让jacoco生成xml格式的报告,其实很简单,在build.gradle中添加这样一个设置就好了,打开xml格式,关闭csv和html格式。

jacocoTestReport {
    reports {
        xml.enabled true
        csv.enabled false
        html.enabled false
    }
}

然后在执行的时候把这个task添加到参数里才可以

./graldew jacocoTestReport

如果将报告上传到sonarqube,除了要在gradle脚本里添加jacoco插件还要添加sonarqube的gradle插件,完整的gradle如下(也欢迎到我参与的开源项目中去看全部的代码https://github.com/vmware/singleton/blob/g11n-java-client/build.gradle):

apply plugin: 'java'
apply plugin: "jacoco"
apply plugin: "org.sonarqube"

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1")
...
  }
}

...
...
...
...

jacocoTestReport {
    reports {
        xml.enabled true
        csv.enabled false
        html.enabled false
    }
}

二、多项目的gradle构建

在多项目的构建中,如果要计算某一些子项目的覆盖率,那么可以在子项目的gradle中都添加jacoco插件并配置jacocoTestReport任务,但是这需要修改很多个gradle脚本,以后再有更改时也比较繁琐。可以采用下面的方法,只在子项目的gradle脚本中添加jacoco插件,jacocoTestReport则在根项目的gradle中添加,如下,要有一个判断,只在添加了jacoco插件的项目中配置jacocoTestReport:

allprojects  {
    ...
    ...
    afterEvaluate {
        if (pluginManager.hasPlugin('jacoco')) {
            jacocoTestReport {
                reports {
                    xml.enabled true
                    csv.enabled false
                    html.enabled false
                }
            }
        }
    }
}

最后在执行gradle的时候还可以通过参数sonar.coverage.exclusions来排除不需要计算覆盖率的代码,如下:

./gradlew jacocoTestReport sonarqube --stacktrace -Dsonar.login=$SONAR_TOKEN -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=$SONAR_ORG -Dsonar.projectKey=$PROJECT_KEY -Dsonar.projectName=$PROJECT_NAME -Dsonar.branch.name=master -Dsonar.coverage.exclusions=modules/**,tools/tool-trans-fetcher/src/**,vip-common/src/main/java/com/vmware/vip/common/**,vip-manager-l10n-agent/src/** --info
 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!