我想在多个Gradle任务中重用通用逻辑,类似于此答案中建议的那样,但我遇到了额外项目属性不可见的问题。
归结起来,这就是问题。假设我有一个根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
请注意,如果满足以下条件,则似乎可以使用此方法:
- 自定义任务与额外属性一起在根项目中定义
- 如果您使用动态属性而不是额外属性,则可以使用此方法,但这些已被弃用
(Note that this seems to work if: - the custom task is defined in the root project alongside the extra property - if you use dynamic properties instead of extra properties, but those are deprecated)
project.foo
而不是project.ext.foo
时,会收到有关使用动态项目属性的弃用警告。 - Alan Kruegerproject.foo
(这是不应该做的)时,才会收到弃用警告。 - Peter Niederwieser