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

时间:2019-03-01 12:24:36

标签: 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")
}

在我的子项目中,我可以使用代码访问依赖项:

dependencies {
    implementation("group:name:${extra["libVersion"]}")
}

是否可以通过其名称访问libVersion变量?我想使用代码在子项目中声明依赖项:

dependencies {
    implementation("group:name:$libVersion")
}

因为这将提供到属性的类型安全链接以及IDE对属性值的帮助。一种方法是将变量绑定到额外的属性,如下所示:

val libVersion: String by extra

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

1 个答案:

答案 0 :(得分:0)

您可以使用

之类的代码
val propertName by extra {
  //here goes the initializer code
  "the result"
}

extra{..}函数定义名称为propertName(或变量名称)的项目的属性

你可能会说

val anotherProperty by rootProject.extra

访问其他项目的额外属性