将build.gradle转为KTS时出现‘extra’属性未知错误
解决Gradle Kotlin Script中buildscript.ext转换的错误
问题场景
将Groovy版本的根项目build.gradle转换为Kotlin Script格式时,原Groovy代码中的buildscript.ext块转换后执行报错:
A problem occurred evaluating root project 'Sage'.
Could not get unknown property 'extra' for object of type org.gradle.api.internal.initialization.DefaultScriptHandler.
原Groovy代码:
buildscript { ext { compose_version = '1.2.0' } } plugins { id("com.android.application") version "7.4.0" apply false id("com.android.library") version "7.4.0" apply false id("org.jetbrains.kotlin.android") version "1.7.0" apply false }
错误的Kotlin Script代码:
buildscript { extra.apply{ set("compose_version", "1.2.0") } }
解决方案
在Kotlin Script的buildscript块中,不能用extra.apply{}的写法,正确设置扩展属性的方式是直接通过下标赋值或set()方法调用extra属性。完整的正确转换代码如下:
buildscript { // 方式1:下标赋值(推荐,更简洁) extra["compose_version"] = "1.2.0" // 方式2:调用set方法 // extra.set("compose_version", "1.2.0") } plugins { id("com.android.application") version "7.4.0" apply false id("com.android.library") version "7.4.0" apply false id("org.jetbrains.kotlin.android") version "1.7.0" apply false }
原因说明
在Gradle Kotlin Script的buildscript上下文里,extra是ScriptHandler的属性,直接通过extra[key] = value或extra.set(key, value)即可完成扩展属性的设置,不需要用apply块包裹,之前的写法会导致Gradle无法识别extra属性从而抛出错误。
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

