在Kotlin DSL中如何设置gradle额外属性?
我试图组织我的构建文件,因为我会在groovy,通过在一个单独的文件重用值。 但我不明白在kotlin DSL中做同样的事情的语法。
以下是我在root build.gradle.kts中使用的内容:
applyFrom("config.gradle.kts") buildscript { repositories { google() jcenter() } dependencies { val test = project.extra["minSdkVer"] classpath("com.android.tools.build:gradle:3.0.0-alpha4") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-5") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() mavenCentral() } }
这是什么在config.gradle.kts被引用:
mapOf( Pair("minSdkVer", 22), Pair("targetSdkVer", 25), Pair("compiledSdkVer", 25), Pair("buildToolsVer", "26-rc4") ).entries.forEach { project.extra.set(it.key, it.value) }
但是有一个错误:
无法获取属性“minSdkVer”的额外属性扩展,因为它不存在
正确的解决方法:在执行其他任何事情之前,Gradle会严格收集并应用脚本中的buildscript { ... }
块。 所以,要在buildscript
config.gradle.kts
的buildscript
,应该将applyFrom("config.gradle.kts")
移动到buildscript { ... }
块中:
buildscript { applyFrom("config.gradle.kts") /* ... */ }
另一个可能的错误是在另一个ExtensionAware
的范围内使用额外的属性作为extra["minSdkVer"]
,就像本例中的一个任务:
val myTask = task("printMinSdkVer") { doLast { println("Extra property value: ${extra["minSdkVer"]}") } }
在这种情况下, extra.get(...)
不使用project.extra
而是使用extra
的任务。
要解决这个问题,请指定您使用该项目。 直接使用:
println(project.extra["minSdkVer"])
和代表团。
val minSdkVer by project.extra
- 如何用gradle-script-kotlin配置spring-boot重新打包
- 如何在两个build.gradle.kts文件之间共享构建配置?
- Gradle脚本Kotlin中的锅炉项目配置
- Kotlin JS项目的基本Gradle脚本Kotlin文件是什么样的?
- 如何添加gradle(理想情况下使用kotlin-dsl)到现有的intellij python项目
- 使用gradle-script-kotlin的ant任务
- 如何使用Kotlin DSL配置AppEngine Gradle插件
- 我怎样才能用Kotlin DSL为Gradle配置Kotlin协程?
- 如何用gradle kotlin脚本创建fat jar