迁移至Kotlin DSL时遇未知属性'extra'错误求助
问题解决:Groovy DSL转Kotlin DSL时buildscript中extra报错
错误信息
Could not get unknown property 'extra' for object of type org.gradle.api.internal.initialization.DefaultScriptHandler.
原Groovy DSL代码
buildscript { extra.apply{ // App dependencies set("rxjava2Version", "2.1.9") set("rxandroidVersion", "2.1.1") set("butterKnifeVersion", "10.1.0") set("kotlinVersion", "1.8.0") } }
修正后的Kotlin DSL代码
有两种可行写法:
写法1:显式引用this.extra并使用apply
buildscript { this.extra.apply { // App dependencies set("rxjava2Version", "2.1.9") set("rxandroidVersion", "2.1.1") set("butterKnifeVersion", "10.1.0") set("kotlinVersion", "1.8.0") } }
写法2:直接通过下标赋值(更符合Kotlin风格)
buildscript { // App dependencies extra["rxjava2Version"] = "2.1.9" extra["rxandroidVersion"] = "2.1.1" extra["butterKnifeVersion"] = "10.1.0" extra["kotlinVersion"] = "1.8.0" }
原因说明
在Kotlin DSL中,buildscript块的上下文是ScriptHandler实例,默认不会直接暴露extra属性,需要显式通过this.extra引用,或者直接使用下标操作符给extra赋值。而Groovy DSL中可以直接省略this,这是两者语法上的关键差异。
内容的提问来源于stack exchange,提问作者Kellin Strook
相关产品推荐
相关产品推荐

