我手动运行以下任务:
./gradlew clean jacocoTestReportFree sonarqube -Pflavor=free
./gradlew clean jacocoTestReportPaid sonarqube -Pflavor=paid
现在我想创建一个新任务来启动这两个任务。这就是代码。
apply plugin: 'org.sonarqube'
//SonarQube configuration.
sonarqube {
def flavorName = ''
if (project.hasProperty('flavor')) {
//read the flavor from properties.
flavorName = flavor
androidVariant flavorName + "Debug"
} else {
androidVariant 'debug'
}
properties {
property 'sonar.host.url', 'http://localhost:9000'
property "sonar.projectName", "Java Example " + flavorName
property "sonar.projectKey", "jonceski.kliment.jacococoverageexample." + flavorName
property 'sonar.java.source', '8'
property 'sonar.sourceEncoding', 'UTF-8'
property "sonar.language", "java"
property "sonar.login", "admin"
property "sonar.password", "admin"
property 'sonar.java.binaries', 'build/intermediates/classes/' + flavorName + "/debug"
property 'sonar.java.test.binaries', 'build/intermediates/classes/' + flavorName + "/debug"
property 'sonar.junit.reportsPath', 'build/test-results/test' + flavorName.capitalize() +'DebugUnitTest'
property 'sonar.jacoco.reportPath', fileTree(dir: project.projectDir, includes: ['**/*.exec'])
property 'sonar.jacoco.itReportPath', fileTree(dir: project.projectDir, includes: ['**/*.ec'])
property 'sonar.java.coveragePlugin', 'jacoco'
property 'sonar.exclusions', '**/*.js,**/*.css,**/*.html'
}
}
这是我尝试过但没有成功的。
task coverageFlavorFree {
doFirst {
clean
}
doLast {
jacocoTestReportFree
sonarqube(flavor="free")
}
}
在gradle中,您不应该只调用其他任务。做这些事情的正确方法是为每种风格创建任务并声明它们的依赖关系。
以下是一个完整的工作示例:
plugins {
id "org.sonarqube" version "2.7"
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
flavorDimensions 'version'
productFlavors {
professional {
dimension 'version'
}
free {
dimension 'version'
}
}
}
sonarqube {
}
task SonarQubeAll(group: 'SonarQube') {
}
android.applicationVariants.all { flavor ->
task("${flavor.name}SonarQube", group: 'SonarQube') {
description = 'Sets the sonarqube configuration'
finalizedBy 'sonarqube'
SonarQubeAll.dependsOn("${flavor.name}SonarQube")
doLast {
println("Setting flavor to ${flavor.name} for ${project.sonarqube.androidVariant}")
project.sonarqube.androidVariant = flavor.name
//TODO: Set other flavor dependent sonarqube properties here
// using project.sonarqube.properties...
}
}
}
这将为每种风格生成一个名为{flavor}SonarQube
的任务,以及一个称为SonarQubeAll
的根任务。每个风味任务将由实际的sonarqube任务完成。根任务将所有其他任务作为依赖项,从而使它们全部被执行。
这是依赖关系图:
:myapplication:SonarQubeAll
+--- :myapplication:freeDebugSonarQube
+--- :myapplication:freeReleaseSonarQube
+--- :myapplication:professionalDebugSonarQube
--- :myapplication:professionalReleaseSonarQube