如何从 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
也有效,但可读性较差。
我有一个使用 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
也有效,但可读性较差。