从 kotlin 的 gradle 中获取项目实例

Get the project instance from kotlin's gradle

我正在尝试将脚本从 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
    }

}

请注意,我添加了额外的 arg Project

Groovy 直接访问 project 属性,我想知道如何直接从 kotlin 获取它,这样我就可以删除那个额外的 arg并保留之前的语法。

简答:你不能

长答案:

由于 Kotlin(和 Java)的 strong/statically 类型特性,您不能这样做。 Groovy 是一种动态语言,可以让您在一定程度上摆脱很多事情。除了 Groovy 的动态特性之外,Gradle 还实现了 Groovy 提供的许多 metaprogramming

因此,即使您没有在 Groovy 脚本中显式传递 Project,也会在幕后动态查找它。

您可以将 Group 设为 extension of Project 以获得项目参考。