Groovy Gradle-我可以使用约定属性管理任务依赖关系吗?

Groovy Gradle-我可以使用约定属性管理任务依赖关系吗?,groovy,gradle,Groovy,Gradle,我正在使用Gradle作为我项目的构建系统。 我想要的是,如果给定属性设置为“true”,则使任务A依赖于任务B。这可行吗?如果答案是肯定的,我该怎么做 目前,我正在使用conventionMapping,但这似乎不起作用。我的代码如下所示: MyTask.conventionMapping.propertyName = { MyPluginConvention.propertyName } if (MyTask.propertyName.equals("true")) { MyTas

我正在使用Gradle作为我项目的构建系统。 我想要的是,如果给定属性设置为“true”,则使任务A依赖于任务B。这可行吗?如果答案是肯定的,我该怎么做

目前,我正在使用conventionMapping,但这似乎不起作用。我的代码如下所示:

MyTask.conventionMapping.propertyName = { MyPluginConvention.propertyName }

if (MyTask.propertyName.equals("true")) {
    MyTask.dependsOn ...
}
提前感谢,,
Marin

您将不得不使用它们的实例,而不是使用任务/约定类。此外,您还必须推迟决定是否添加任务依赖项。例如:

def myTask = project.tasks.create("myTask", MyTask)
def otherTask = ...
def myConvention = new MyConvention()    
...
myTask.conventionMapping.propertyName = { myConvention.propertyName }
// defer decision whether to depend on 'otherTask'
myTask.dependsOn { myTask.propertyName == "true" ? otherTask : [] }
如果作用域中没有任务变量,您还可以通过
project.myTask
project.tasks[“myTask”]
引用现有任务


PS:约定对象已被替换为。

更多信息会有所帮助。这段代码是来自构建脚本还是插件类?MyTask和MyPluginConvention是类名还是变量名?谁宣布任务A,谁宣布任务B?这段代码来自一个插件类。MyTask和MyPluginConvention是类名。MyTask扩展了DefaultTask并实现了VerificationTask。这两个类都是我声明的。我想要依赖的任务也是由我声明的,它还扩展了DefaultTask并实现了VerificationTask。。这正是我正在做的。这种方法不起作用,因为在插件配置的这一点上,属性还没有设置。Gradle懒散地评估约定属性。我必须想办法“强制”评估。我该怎么做?你说“MyTask和MyPluginConvention是类名”。因此,“MyTask.conventionMapping”等是错误的。也就是说,除非对变量名使用camel-case,否则这是非常不鼓励的,在Groovy的情况下,它甚至会破坏代码。我已经更新了我的答案以涵盖其他问题。对不起,你是对的。我的第一篇文章有点乱。myTask和myPluginConvention是用户定义类的实例。无论如何我发现我可以使用project.afterevaluation方法,现在一切都正常了。无论如何,谢谢。我的回答中延迟的
dependsOn
也有同样的作用,避免
afterEvaluate
。谢谢你接受我的回答。