Gradle. Kotlin - можно ли создавать динамические (на лету) задачи?

Я разработчик Android. И как результат напишите build by Gradle. Многие задачи я пишу на Gradle DSL на Groovy.

Иногда мне нужно создавать задачи Gradle динамически («на лету»). Вот пример:

task installDebugFlavors() {
    android.applicationVariants.all { v ->
        if (v.name.endsWith('Debug')) {
            String name = v.name.capitalize()
            dependsOn "install$name"
        }
    }
}

Эта задача генерирует новые задачи со всеми комбинациями вкусов. В результате скрипт Gradle очень маленький, его легко понять и легко поддерживать. Это очень мощные возможности Groovy. И мне это очень часто помогает.

В новой версии Gradle был введен новый язык - Kotlin.

У меня вопрос: можно ли написать такую ​​же задачу (для динамического создания других задач) на Kotlin?


person Alex    schedule 30.07.2017    source источник


Ответы (1)


Да, вы можете создавать задачи динамически и ссылаться на другие задачи по имени (String) в Gradle Kotlin DSL.

tasks {
    "installDebugFlavors" {
        android.applicationVariants.forEach { v ->
            if (v.name.endsWith("Debug")) {
                val name = v.name.capitalize()
                dependsOn("install$name")
            }
        }
    }        
}
person ephemient    schedule 30.07.2017