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

fyr*_*fyr 8 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())
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Sonarrunner配置

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

property 'sonar.exclusions', excludedClasses().join(',')
Run Code Online (Sandbox Code Playgroud)

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

property 'sonar.jacoco.exclusions', excludedClasses().join(',')
Run Code Online (Sandbox Code Playgroud)

Mik*_*iuk 20

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

  • Gradle配置:`sonarqube {properties {property'sonar.coverage.exclusions',"**/com/some/package/*,**/com/other/package/Class*"}}` (10认同)

Ste*_*kov 8

如果您将 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)
    }
}
Run Code Online (Sandbox Code Playgroud)


tak*_*rsh 7

从 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>/**/*]
Run Code Online (Sandbox Code Playgroud)

向声纳覆盖属性提供排除列表

property 'sonar.coverage.exclusions', exclusionList
Run Code Online (Sandbox Code Playgroud)

笔记:

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

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


Ben*_*son 5

To combine @Mikalai's answer and @pavel's comment into something that's a bit easier to copy and paste:

To exclude a package or class from all Sonar checks (coverage, code smells, bugs etc), add the following to build.gradle:

sonarqube {
    properties {
        property 'sonar.exclusions', "**/com/some/package/**"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

sonarqube {
    properties {
        property 'sonar.coverage.exclusions', "**/com/some/package/**"
    }
}
Run Code Online (Sandbox Code Playgroud)