我有一些文件,如导航、意图和自动生成的文件,我想从 SonarQube 的覆盖率分析中排除它们。我想将其放入 gradle 插件中,这样我就可以将其应用于多个模块。有办法做到这一点吗?
我有 5.0.0.4638 版本的 SonarQube。
文件示例:“/Navigation.”、“/NavGraph.”。
我想我需要一个实现Plugin接口的类。
class SonarQubeExclusionPlugin : Plugin<Project> {
override fun apply(project: Project) {
// TODO
}
}
我在某个地方看到了这样的方法,但即使我将 SonarQube 添加到模块中,我也无法访问 SonarQubeExtension 类。
class SonarQubeExclusionPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.afterEvaluate {
configureSonarQubeExtension(project)
}
}
private fun configureSonarQubeExtension(project: Project) {
val intentFilesToExclude = listOf(
"**/*Activity.*",
"**/*Fragment.*"
// Add more intent-related file patterns here if needed
)
project.extensions.configure(SonarQubeExtension::class.java) { extension ->
extension.properties {
it["sonar.coverage.exclusions"] = intentFilesToExclude.joinToString(",")
}
}
}
}
使用这种方法,您不需要为其实现插件
android {
// ... other configurations
sonarqube {
properties {
property "sonar.coverage.exclusions", "**/your/activity/package/*.java, **/your/fragment/package/*.java"
}
}
您还可以获得所有排除的列表,如下所示:
创建如下所示的排除列表
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>/**/*]
Provide the exclusion list to sonar coverage property
property 'sonar.coverage.exclusions', exclusionList