如何定义settings.gradle.kts和build.gradle.kts中可用的kotlin dsl gradle属性?

时间:2018-07-11 17:02:59

标签: gradle build kotlin settings gradle-kotlin-dsl

我有一个使用kotlin DSL编写的多平台(kotlin)多项目gradle项目。忍受我。在settings.gradle.kts中,我有两种主要类型的包括帮助程序来处理替代项目布局的帮助程序,即常规模块(module / src)和多平台模块(module / js,module / common,module / jvm)。然后,我创建变量以保存与这些帮助器一起使用的每个变量的列表,以按我的方式包括所有内容。

我希望能够重用build.gradle.kts文件中设置(列表)中定义的信息。

每次我尝试像在构建文件中那样进行操作时,都会遇到相同的错误:

val test: List<String> by rootProject.extra(listOf("game", "spine"))

val test: List<String> by extra(listOf("game", "spine"))

我得到的错误是:

Line 68: val test: List<String> by rootProject.extra(listOf("game", "spine"))
                                             ^ Expression 'extra' cannot be invoked as a function. The function 'invoke()' is not found

我的猜测是设置不支持扩展,因此即使this在设置中属于Project类型(bc是根项目),也没有关系,您也不能使用其他功能。我能想到的唯一方法是在gradle属性文件中定义项目属性,但是我不太热衷于此,因为这似乎不是要保留的信息类型。

在buildscript进行过程中,是否有任何东西允许延迟扩展属性的初始化?

1 个答案:

答案 0 :(得分:0)

我意识到这个帖子有点老了,但我最近给出了一个答案 here。 但是会重复一遍,因为我也遇到了这个问题....

settings.gradle.kts

// // This works in settings.gradle
// gradle.ext.GLOBAL_VAR = "This is a global value"
// println("settings.gradle ::: " + gradle.GLOBAL_VAR)

// This works in settings.gradle.kts
val settingsValue = "This value was set in settings.gradle.kts"
if (gradle is ExtensionAware) {
    (gradle as ExtensionAware).extra["GLOBAL_VAR"]=settingsValue
    println("settings.gradle.kts ::: " + (gradle as ExtensionAware).extra.get("GLOBAL_VAR"))
}

build.gradle.kts

// // This works in settings.gradle
// println("build.gradle ::: " + gradle.GLOBAL_VAR)

// This works in settings.gradle.kts
if (gradle is ExtensionAware) println("build.gradle.kts ::: " + (gradle as ExtensionAware).extra.get("GLOBAL_VAR"))
  • Gradle 6.6.1 版