Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
使用Sonarrunner和Gradle从Jacoco报告中排除包_Gradle_Jacoco_Sonar Runner - Fatal编程技术网

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

使用Sonarrunner和Gradle从Jacoco报告中排除包,gradle,jacoco,sonar-runner,Gradle,Jacoco,Sonar Runner,有没有一种方法可以将包从SonarQube(由gradle+sonar runner检测)覆盖报告(由jacoco生成)中排除,而不将其完全排除在项目之外 以下是我迄今为止所做的尝试: 版本信息 SonarQube 4.5.1 格拉德尔2.2 Jacoco配置 声纳转轮配置 属性设置以从Sonar分析中排除包。将此添加到我的配置中会导致软件包根本不显示在Sonar中的情况 property 'sonar.exclusions', excludedClasses().join(',') 属

有没有一种方法可以将包从SonarQube(由gradle+sonar runner检测)覆盖报告(由jacoco生成)中排除,而不将其完全排除在项目之外

以下是我迄今为止所做的尝试:

版本信息
  • SonarQube 4.5.1
  • 格拉德尔2.2
Jacoco配置 声纳转轮配置 属性设置以从Sonar分析中排除包。将此添加到我的配置中会导致软件包根本不显示在Sonar中的情况

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

属性设置以从jacoco中排除包。设置此选项会导致包被排除在覆盖率分析之外,但显示为0%,这将累积为糟糕的总分

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

我已通过使用sonar-project.properties中的sonar.coverage.Exclutions属性,成功地从覆盖率报告中排除了特定的包。官方

中描述了该属性,将@Mikalai的答案和@pavel的评论组合成更易于复制和粘贴的内容:

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

sonarqube {
    properties {
        property 'sonar.exclusions', "**/com/some/package/**"
    }
}
sonarqube {
    properties {
        property 'sonar.coverage.exclusions', "**/com/some/package/**"
    }
}
要仅从Sonar代码覆盖率检查中排除软件包或类,请将以下内容添加到
build.gradle

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

将资源、资产、自定义包和自动生成的类从sonar 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>/**/*]
注:

  • 保留完整路径以排除完整目录
  • **/*包括父目录下的所有文件和子目录
  • *Bean包括所有包含“Bean”的类名
  • **/首先,它涵盖了特定包的父目录

执行上述更改后,运行Jacoco命令并检查sonar portal的覆盖范围部分。

如果您将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)
    }
}
从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/**";
        }
    }

这在gradle 6和sonarqube插件2.8中对我起了作用

属性“sonar.coverage.excludes”、“***/com/some/package/entity/***、”+“***/com/some/package/config/***、***/com/some/package/dto/***、***/com/some/package/dao/***”


注意:包是逗号分隔的,但在单个字符串中

Gradle配置:
sonarqube{properties{property'sonar.coverage.exclusions',“***/com/some/package/*,***/com/other/package/Class*”}
正确的工作模式是:sonarqube{properties{property'sonar.coverage.exclusions'、'*/model/、*/commons/、*/exception/、*/controller/、*/utils/、***/Test.java'}}我正在运行sonar v7.9,并在build.gradle中进行了相同的配置。sonar仪表板仍将这些类显示为0%覆盖率。是否需要其他配置/设置?