Is there a way to exclude packages from SonarQube(instrumented by gradle + sonar-runner) coverage reports(generated by jacoco) without excluding them completely from the project ?
Below is what i tried so far:
Version information
- SonarQube 4.5.1
- Gradle 2.2.
Jacoco configuration
// 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 configuration
Property setting to exclude package from Sonar analysis. Adding this to my configuration lead to the situation that the packages do not show-up at all in Sonar.
property 'sonar.exclusions', excludedClasses().join(',')Property setting to exclude packages from jacoco. Setting this leads to the situation that packages are excluded from coverage analysis however show up having 0% which accumulates to bad total scores.
property 'sonar.jacoco.exclusions', excludedClasses().join(',') 7 Answers
I have managed to exclude particular packages from coverage reports by using sonar.coverage.exclusions property in sonar-project.properties. Property is described in official documentation
3To 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/**" }
}To exclude a package or class from only Sonar code coverage checks, add the following to build.gradle:
sonarqube { properties { property 'sonar.coverage.exclusions', "**/com/some/package/**" }
} 1 To exclude res, assets, custom packages and auto generated classes from sonar code coverage for android project.
Create Exclusion list like below
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', exclusionListNOTE:
- Keep the full path to exclude the full directory
- **/* includes all the files and sub directories under the parent directory Refer Here
- *Bean includes all the class names contains "Bean".
- **/ starting with it covers the parent directories for the particular package.
Run Jacoco command and check sonar portal's coverage section after doing above changes.
If you are using Gradle 5+ with Kotlin DSL, you can exclude the files from coverage like this:
// 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) // properties { property("sonar.coverage.exclusions", exclusions) }
} exclude multiple module or class from Sonarqube. add below code to build.gradle:
example : package name= com.student.result.detail , com.customer.order ,com.student
sonarqube { properties { property 'sonar.exclusions', "**/com/student/result/details/**", "**/com/customer/order/**", "**/com/student/**"; } } This worked for me with gradle 6, sonarqube plugin 2.8
property "sonar.coverage.exclusions" , "**/com/some/package/entity/**/*," + "**/com/some/package/config/**/*,**/com/some/package/dto/**/*,**/com/some/package/dao/**/*"
NOTE: packages are comma separated but in a single string
Most of the answer I have seen here didn't work for me, resulting on the following error:
Execution failed for task ':sonarqube'.
> Could not find method property() for arguments [sonar.coverage.exclusions, **/package/path/Class1**, **/package/path/Class2**, **/package/path/Class3**, **/package/path/Class4**] on object of type org.sonarqube.gradle.SonarQubeProperties.The reason is that sonar is asking for a string instead of several comma-separated strings as property value. So instead of:
sonarqube { properties { property 'sonar.exclusions', "**/com/student/result/details/**", "**/com/customer/order/**", "**/com/student/**"; } }The solution for me was:
sonarqube { properties { property 'sonar.exclusions', "**/com/student/result/details/**,"+ "**/com/customer/order/**,"+ "**/com/student/**"; } }