gpt4 book ai didi

gradle - Kotlin DSL 中的 gradle 额外属性是如何设置的?

转载 作者:IT老高 更新时间:2023-10-28 13:36:07 25 4
gpt4 key购买 nike

我正在尝试像在 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)
}

但是有一个错误:

Cannot get property 'minSdkVer' on extra properties extension as it does not exist

最佳答案

正确的修复: Gradle 在执行任何其他操作之前严格从您的脚本中收集并应用 buildscript { ... } block 。因此,要使 config.gradle.kts 中的属性在 buildscript 中可用,您应该移动 applyFrom("config.gradle.kts") 到你的 buildscript { ... } block :

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 - Kotlin DSL 中的 gradle 额外属性是如何设置的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44589153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com