-
-
Save cesarioputera/859456a3846776ca82dd1904180ce964 to your computer and use it in GitHub Desktop.
apply from: "../jacoco.gradle" | |
def debugTree = fileTree(dir: "${buildDir}/intermediates/packaged-classes/flavorUnsigned", includes: includeFileFilter, excludes: excludeFileFilter) | |
def kotlinDebugTree = fileTree(dir: "${buildDir}/tmp/kotlin-classes/flavorUnsignedDebug", includes: includeFileFilter, excludes: excludeFileFilter) | |
def mainSrc = "${project.projectDir}/src/main/java" | |
task jacocoTestReport(type: JacocoReport, dependsOn: ['testFlavorUnsignedDebugUnitTest', 'assembleDebug']) { | |
reports { | |
xml.enabled = true | |
html.enabled = true | |
} | |
getSourceDirectories().setFrom(files([mainSrc])) | |
getClassDirectories().setFrom(files([debugTree], [kotlinDebugTree])) | |
getExecutionData().setFrom(fileTree(dir: "$buildDir", includes: [ | |
"jacoco/testFlavorUnsignedDebugUnitTest.exec", | |
])) | |
} | |
check.dependsOn jacocoTestReport |
apply plugin: "jacoco" | |
ext.excludeFileFilter = [ | |
//ExcludeFiles | |
] | |
jacoco { | |
toolVersion = "0.8.2" | |
} | |
ext { | |
limits = [ | |
'instruction': 50 | |
] | |
} | |
ext.includeFileFilter = [ | |
//IncludedFiles | |
] | |
android { | |
testOptions { | |
unitTests.all { | |
jacoco { | |
includeNoLocationClasses = true | |
} | |
} | |
unitTests.returnDefaultValues = true | |
} | |
} |
apply from: '../sonarqube.gradle' | |
sonarqube { | |
//read the flavor from properties. | |
def flavorName = "flavorUnsigned" | |
def variant = "debug" | |
androidVariant flavorName + variant.capitalize() | |
properties { | |
def libraries = project.android.sdkDirectory.getPath() + "/platforms/android-28/android.jar" + ",build/intermediates/packaged-classes/**/classes.jar" | |
property "sonar.projectVersion", app_version | |
property 'sonar.binaries', "build/intermediates/packaged-classes/$flavorName,build/tmp/kotlin-classes/$androidVariant" | |
property "sonar.libraries", libraries | |
property 'sonar.java.binaries', "build/intermediates/packaged-classes/$flavorName,build/tmp/kotlin-classes/$androidVariant" | |
property "sonar.java.libraries", libraries | |
property 'sonar.java.test.binaries', "build/intermediates/packaged-classes/$flavorName,build/tmp/kotlin-classes/$androidVariant" | |
property "sonar.java.test.libraries", libraries | |
property 'sonar.junit.reportsPaths', "build/test-results/test${androidVariant.capitalize()}UnitTest" | |
property 'sonar.jacoco.reportPaths', "build/jacoco/test${androidVariant.capitalize()}UnitTest.exec" | |
} | |
} |
apply plugin: 'org.sonarqube' | |
sonarqube { | |
properties { | |
property "sonar.projectVersion", app_version | |
property "sonar.sourceEncoding", "UTF-8" | |
property "sonar.sources", "src/main/java" | |
property "sonar.tests", "src/test/java" | |
property "sonar.dynamicAnalysis", "reuseReports" | |
property 'sonar.java.coveragePlugin', 'jacoco' | |
property 'sonar.coverage.exclusions', excludeFileFilter.join(',') | |
property "sonar.scm.provider", "git" | |
} | |
} |
Hi @anton46,
for suggestion #2:
I have 1 jacoco configuration for each module, I used common jacoco-lib.gradle
and include it in each features' build.gradle
. Which one is better? :D
because of my configuration, I don't think the dependsOn
has effect for this.
Thats might be the problem why sonar couldnt collect the report. You need to combine all together in one executions
Kalo aku sekarang cuma pake satu file jacoco.gradle
yang akan di include di root gradle
Disitu nanti filter module mana aja yang mau aku include ke jacoco (karena ada beberapa module yg generated)
Something like this:
final coveredModules = subprojects.findAll { IsShouldBeCovered }
configure(coveredModules) {
// And now we define our jacoco task that depends on our test
task jacocoReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
}
}
After this you can define your whole project coverage report
task jacocoMarketpalceApp(type: JacocoReport) {
dependsOn(projects.jacocoReport)
final source = files(projects.jacocoReport.sourceDirectories)
additionalSourceDirs.setFrom source
sourceDirectories.setFrom source
classDirectories.setFrom files(projects.jacocoReport.classDirectories)
executionData.setFrom files(projects.jacocoReport.executionData)
reports {
// config your aggregated reports here
}
}
oh one more thing, how about the sonar's setting? In my case did the same thing like jacoco's setting, create 1 sonar-lib.gradle
and include it in each build.gradle
oh one more thing, how about the sonar's setting? In my case did the same thing like jacoco's setting, create 1
sonar-lib.gradle
and include it in eachbuild.gradle
I haven't tried it yet, but i think the principle is the same.
Also, you could configure it to apply your gradle files to all your subprojects
// in your root gradle
subProjects {
apply from : sonarqube.gradle
}
Hi @anton46 @esafirm
The issue is resolved now
Thank you for the suggestion
After did the changes (implement the suggested approach), the problem is the path and there are some deprecated properties in sonar
sonarqube {
//read the flavor from properties.
def flavorName = "flavorUnsigned"
def variant = "debug"
androidVariant flavorName + variant.capitalize() --------> //outside
properties {
...
property 'sonar.binaries', "build/tmp/kotlin-classes/$androidVariant" --------> //inside
property "sonar.libraries", libraries
...
property 'sonar.junit.reportsPaths', "build/test-results/test${androidVariant.capitalize()}UnitTest"
property 'sonar.jacoco.reportPaths', "build/jacoco/test${androidVariant.capitalize()}UnitTest.exec"
}
}
- Path issue: the
androidVariant
inside thepropery{}
is different with the outsideandroidVariant
- Deprecated property:
sonar.jacoco.reportPaths
has been deprecated and changed tosonar.coverage.jacoco.xmlReportPaths
dependsOn
missing some tasks from each modules:<module-name>:testDebugUnitTest
Sample config for modularization :