Gradle: создать параметры передачи задачи в виде командной строки - PullRequest
2 голосов
/ 19 апреля 2020

Я вручную запускаю следующие задачи:

./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")
    }
}

1 Ответ

1 голос
/ 22 апреля 2020

В 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, а также задача root с именем SonarQubeAll. Каждая задача аромата будет завершена фактической задачей sonarqube. Задача root будет иметь все другие задачи в качестве зависимости, вызывая их выполнение.

Вот график зависимости:

:myapplication:SonarQubeAll
+--- :myapplication:freeDebugSonarQube
+--- :myapplication:freeReleaseSonarQube
+--- :myapplication:professionalDebugSonarQube
\--- :myapplication:professionalReleaseSonarQube
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...