![](/img/trans.png)
[英]How to import a helper class in buildSrc/build.gradle.kts, settings.gradle.kts, and build.gradle.kts?
[英]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"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.