如何在Gradle Kotlin DSL中使用类型安全的额外属性

如何在Gradle Kotlin DSL中使用类型安全的额外属性,gradle,kotlin,Gradle,Kotlin,我有一个用Kotlin DSL编写的多模块项目。以下是相关文件: rootDir/gradle/dependencies.gradle.kts: // other config val libVersion by extra("0.1") rootDir/build.gradle.kts: // other config subprojects { apply(from = "$rootDir/gradle/dependencies.gradle.kts") } 在我的子项目中,我可

我有一个用Kotlin DSL编写的多模块项目。以下是相关文件:

rootDir/gradle/dependencies.gradle.kts

// other config
val libVersion by extra("0.1")
rootDir/build.gradle.kts

// other config
subprojects {
    apply(from = "$rootDir/gradle/dependencies.gradle.kts")
}
在我的子项目中,我可以通过代码访问依赖项:

dependencies {
    implementation("group:name:${extra["libVersion"]}")
}
有没有办法通过名称访问
libVersion
变量?我想使用以下代码声明子项目中的依赖项:

dependencies {
    implementation("group:name:$libVersion")
}
因为这将提供到属性的类型安全链接,以及关于属性值的IDE帮助。一种方法是将变量绑定到额外属性,如下所示:

val libVersion: String by extra

但这将意味着重复
extra
中已声明的属性。那么,如何以类型安全的方式组织子项目中的依赖项版本,而不重复变量名,同时也使用单点声明依赖项版本?

您可以使用以下代码

val propertName by extra {
  //here goes the initializer code
  "the result"
}
extra{..}
函数为名为
propertName
的项目定义属性(或变量名称)

你可能会说

val anotherProperty by rootProject.extra

要访问其他项目的额外属性

如何从
extra
调用多个变量?