我正在尝试在多个 Gradle 任务之间重用通用逻辑,类似于中建议的内容这个答案 https://stackoverflow.com/a/13072481,但我遇到了额外项目属性不可见的问题。
归根结底,问题就在这里。假设我有一个根 Gradle 构建脚本,build.gradle
设置额外的项目属性,
project.ext.myProp = 'myValue'
我有一个子项目定义在settings.gradle
,
include 'subproject'
并且子项目定义并使用引用该额外项目属性的自定义任务,
class CustomTask extends DefaultTask {
CustomTask() {
doFirst {
println project.ext.myProp
}
}
}
task custom(type: CustomTask) {
println 'custom task'
}
执行这个给我这个:
FAILURE: Build failed with an exception.
...
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':subproject'.
...
Caused by: org.gradle.api.tasks.TaskInstantiationException: Could not create task of type 'CustomTask'.
...
Caused by: groovy.lang.MissingPropertyException: cannot get property 'myProp' on extra properties extension as it does not exist
...
BUILD FAILED
请注意,如果满足以下条件,这似乎有效:
- 自定义任务在根项目中与额外属性一起定义
- 如果您使用动态属性而不是额外的属性,但这些属性已被弃用
读取名为的额外属性的推荐语法foo
在构建脚本中是foo
or project.foo
(而不是ext.foo
),这还将搜索父项目的(额外)属性。编辑:在任务类中,您可以使用project.foo
.
需要注意的是,额外的属性仅适用于构建脚本中的临时脚本;任务类和插件应该not使用它们。任务类根本不应该触及 Gradle 对象模型;相反,它应该声明属性(以及,如果需要的话,方法),允许构建脚本和/或插件为其提供所需的所有信息。这使得理解、重用和记录任务类变得更容易,并且可以通过以下方式声明输入和输出:@Input...
and @Output...
注释。
PS:而不是打电话doFirst
在构造函数中,任务类通常有一个带有注释的方法@TaskAction
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)