Получить экземпляр проекта из kotlin gradle - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь перенести сценарий из Groovy gradle в Kotlin gradle.

Функция:

def Group(Closure closure) {
    closure.delegate = dependencies
    return closure
}

ext {

    aGroup = Group {
        implementation xyz
        kapt xpto
        ...
    }

    ...

}

Что мне удается сделать:

object Group {

    operator fun <T> invoke(project: Project, closure: Closure<T>):Closure<T> {
        closure.delegate = project.dependencies
        return closure
    }

}

Обратите внимание, что я добавил дополнительный аргумент Project .

Groovy доступ к свойству project напрямую, я хотел бы знать, как я могу получить это напрямую также из kotlin, поэтому я смогу удалить этот дополнительный аргумент и сохранить предыдущий синтаксис .

1 Ответ

0 голосов
/ 20 января 2020

Краткий ответ: Вы не можете

Длинный ответ:

Вы не можете из-за сильной / статически типизированной природы Kotlin (и Java). Groovy - это динамический c язык, позволяющий вам в какой-то степени избавиться от многих вещей. В дополнение к динамической c природе Groovy, Gradle реализует множество метапрограммирования , которое Groovy предлагает.

Так что даже если вы явно не передаете Project в вашем Groovy скрипте, за кулисами он ищется динамически.

Вы можете сделать Group расширение из Project , чтобы иметь ссылка на проект.

...