如何从Gradle Kotlin DSL表达式中访问项目版本?

时间:2019-04-16 11:35:16

标签: gradle build.gradle gradle-kotlin-dsl

我有一个使用Kotlin DSL的Gradle 5.3构建脚本,类似于:

plugins {
    `kotlin-dsl`
    `java-library`
}

group = "my.company"
version = "1.2.3"

在这里,version=解析为org.gradle.api.Project.setVersion

现在,更进一步,我想这样做(从Groovy DSL构建文件移植):

tasks.named<Jar>("jar") {
    manifest {
        attributes(
            "Product-Version" to version
        )
    }
}

在这里,version解析为AbstractArchiveTask.getVersion -不是我想要的(也不推荐使用)!

弄清楚我可以使用Kotlin的qualified this,我尝试使用

"${this@Project.version}"

相反(注意:多余的字符串包装消除了其他类型错误),但是我现在得到了Unresolved reference: @Project

如何从Kotlin DSL表达式中访问项目版本?

1 个答案:

答案 0 :(得分:0)

Gradle脚本似乎没有嵌套在Project内,而是将访问器委托给其相关属性。实际上,顶级this的类型为Build_gradle

当这些访问器被遮盖时,可以使用变量project;即

project.version

解决了当前的问题。或者,

this@Build_gradle.version

也是有效的,但可读性较差。