【问题标题】:How to define kotlin dsl gradle properties available in settings.gradle.kts and build.gradle.kts?如何定义 settings.gradle.kts 和 build.gradle.kts 中可用的 kotlin dsl gradle 属性?
【发布时间】:2018-12-19 19:29:18
【问题描述】:

我有一个使用 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 进行时延迟初始化扩展属性?

【问题讨论】:

  • 看起来 settings.gradle.kts 和 build.gradle.kts 唯一真正共享的是 gradle 实例属性,但寻找如何设置这些似乎是一种设置它们的方法被删除?我可能已经找到了一种设置单个属性的方法,所以稍后我会在回过头来重构这部分时对此进行调查。

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


【解决方案1】:

我意识到这是一个有点旧的帖子,但我最近给出了一个答案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2017-11-19
    • 2019-05-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多