使用Sonarrunner和Gradle从Jacoco报告中排除软件包

时间:2014-11-20 07:10:16

标签: gradle jacoco sonar-runner

有没有办法从SonarQube中排除软件包(由gradle + sonar-runner配备)覆盖率报告(由jacoco生成),而不将它们完全排除在项目之外?

以下是我到目前为止所尝试的内容:

版本信息

  • SonarQube 4.5.1
  • Gradle 2.2。

Jacoco配置

// JaCoCo test coverage configuration
tasks.withType(Test) { task ->
    jacoco {
        append = false

        // excluded classes from coverage defined in above configuration
        excludes = excludedClasses()
    }

    jacocoTestReport {
        doFirst {
            classDirectories = fileTree(dir: "${buildDir}/classes/main/").exclude(excludedClasses())
        }
    }

}

Sonarrunner配置

从声纳分析中排除包的属性设置。将此添加到我的配置会导致包装在Sonar中根本不显示的情况。

property 'sonar.exclusions', excludedClasses().join(',')

从jacoco中排除软件包的属性设置。设置此选项会导致包裹被排除在覆盖率分析之外,但显示0%会累积到不良总分。

property 'sonar.jacoco.exclusions', excludedClasses().join(',')

6 个答案:

答案 0 :(得分:17)

我已经设法通过在sonar-project.properties中使用 sonar.coverage.exclusions 属性从coverage报告中排除特定包。财产在官方documentation

中描述

答案 1 :(得分:4)

从Sonarqube中排除多个模块或类。将以下代码添加到 build.gradle:

示例: 包名称= com.student.result.detail,com.customer.order,com.student

  sonarqube {
    properties {
        property 'sonar.exclusions', "**/com/student/result/details/**",
                                     "**/com/customer/order/**",
                                     "**/com/student/**";
        }
    }

答案 2 :(得分:2)

将@Mikalai的答案和@pavel的评论结合起来,使其更易于复制和粘贴:

要从所有声纳检查(覆盖,代码气味,错误等)中排除软件包或类,请将以下内容添加到build.gradle

sonarqube {
    properties {
        property 'sonar.exclusions', "**/com/some/package/**"
    }
}

要将包或类仅从Sonar代码覆盖率检查中排除,请将以下内容添加到build.gradle

sonarqube {
    properties {
        property 'sonar.coverage.exclusions', "**/com/some/package/**"
    }
}

答案 3 :(得分:1)

要将res,资产,自定义程序包和自动生成的类从android项目的声纳代码范围中排除。

创建如下所示的排除列表

exclusionList = [
            //Res and Assets
            "src/main/res/**/*.*",
            "src/main/assets/**/*.*",

            //Auto-Generated
            '**/R.class',
            '**/R$*.class',
            '**/BuildConfig.*',
            '**/*Manifest.*',
            'android/**/*.*',
            'androidx/**/*.*',

            // excluded packages
            **/com/<your-package-path>/**/*]

提供排除列表以覆盖声纳

property 'sonar.coverage.exclusions', exclusionList

注意:

  • 保留完整路径以排除完整目录
  • ** / *包括父目录Refer Here
  • 下的所有文件和子目录
  • * Bean包含所有包含“ Bean”的类名。
  • ** /从它开始涵盖了特定程序包的父目录。

执行上述更改后,运行Jacoco命令并检查声纳门户的覆盖范围部分。

答案 4 :(得分:0)

如果您将Gradle 5+与Kotlin DSL一起使用,则可以从以下内容中排除文件:

// configure the SonarQube plugin
sonarqube {
    val exclusions = listOf(
        "**/com/some/package/**",
        "**/all/files/under/package/*",
        "**/com/some/package/OneClass.kt"
    )

    // exclude the directories only from coverage (but not from other analysis)
    // https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-gradle/
    properties {
        property("sonar.coverage.exclusions", exclusions)
    }
}

答案 5 :(得分:0)

这与gradle 6,sonarqube插件2.8配合使用对我来说

property "sonar.coverage.exclusions" , "**/com/some/package/entity/**/*," + "**/com/some/package/config/**/*,**/com/some/package/dto/**/*,**/com/some/package/dao/**/*"

注意:软件包之间用逗号分隔,但使用单个字符串