首页 > 解决方案 > 从kotlin的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

Groovyproject直接访问该属性,我想知道如何直接从 kotlin 获取它,所以我将能够删除那个额外的 arg 并保留以前的语法。

标签: gradlegradle-kotlin-dsl

解决方案


简短的回答:你不能

长答案:

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

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

您可以对ProjectGroup进行扩展以获取项目的参考。


推荐阅读