从 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
,也会在幕后动态查找它。
我正在尝试将脚本从 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
,也会在幕后动态查找它。