簡體   English   中英

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

[英]How to define kotlin dsl gradle properties available in settings.gradle.kts and build.gradle.kts?

我有一個使用 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是設置中的項目類型(bc 它是根項目),也沒關系,你不能使用額外的。 我能想到的唯一方法是在 gradle 屬性文件中定義項目屬性,但我不是很熱衷於此,因為這似乎不是要保留在那里的信息類型。

是否有任何允許在 buildscript 進行時延遲初始化擴展屬性的內容?

我意識到這是一個有點舊的帖子,但我最近在這里給出了答案。 但是會重復一遍,因為我也遇到了這個問題......

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"))
  • 搖籃版本 6.6.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM