1

我有一个使用 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(它是根项目),也没关系,你不能使用额外的。我能想到的唯一方法是在 gradle 属性文件中定义项目属性,但我不太热衷于此,因为这似乎不是要保留在那里的信息类型。

有什么东西可以在 buildscript 进行时延迟初始化扩展属性?

4

1 回答 1

0

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

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
于 2020-12-20T05:59:07.513 回答