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

How to access the project version from within Gradle Kotlin DSL expressions?

我有一个使用 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 表达式中访问项目版本?

Gradle 脚本似乎没有嵌套在 Project 中,而是将访问器委托给它的相关属性。事实上,顶层 this 是类型 Build_gradle.

当这些访问器被遮蔽时,可以使用变量project;也就是说,

project.version

解决手头的问题。作为替代方案,

this@Build_gradle.version

也有效,但可读性较差。