我有一个使用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进行过程中,是否有任何东西允许延迟扩展属性的初始化?
答案 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"))