Gradle 理解梯度任务相关性(dependsOn)
两个问题:Gradle 理解梯度任务相关性(dependsOn),gradle,Gradle,两个问题: gradle是如何指定一个任务由多个其他任务组成的 gradle的taskName.execute()方法似乎不尊重taskName的依赖关系,这是真的吗?解决方法是什么 更多背景: 现在我有一个没有插件的构建脚本(换句话说,不是Java)。我想要一个名为tests的任务,它将运行我所有的测试任务。我有三个这样的任务。将它们称为task1、task2和task3 我可以说tests.dependsOn['task1','task2','task3'] 这有点不可靠,因为关系似乎是te
taskName.execute()
方法似乎不尊重taskName
的依赖关系,这是真的吗?解决方法是什么tests
的任务,它将运行我所有的测试任务。我有三个这样的任务。将它们称为task1、task2和task3
我可以说tests.dependsOn['task1','task2','task3']
这有点不可靠,因为关系似乎是tests.iscomparisedof['task1','task2','task3']
我可以说:
task tests << {
task1.execute()
task2.execute()
task3.execute()
}
任务测试通常,您不调用task.execute()
可以按以下方式指定一个任务由其他任务组成:
task task1 << {
println "Hello"
}
task task2 << {
println "World"
}
task task3(dependsOn: 'task3dependency') << {
println "QBert"
}
task task3dependency << {
println "MR"
}
task tests(dependsOn: ['task1', 'task2', 'task3'])
请记住,依赖项任务的运行顺序并不总是得到保证,但您可以通过task2.mustRunAfter task1
来缓解这一问题。但通常情况下,任务是按照您期望的顺序运行的
另外,你应该仔细阅读。使用语法时,Gradle的任务模型是“扁平的”,没有聚合的概念。(需要注意的是,TaskInternal#execute
是一种内部方法,不能从构建脚本中调用。)聚合通常使用生命周期任务(具有任务依赖关系但没有任何任务操作的任务)进行模拟:
除了dependsOn
,还支持以下任务关系:mustRunAfter
、shouldlrunafter
、和finalizedBy
“请记住,依赖项任务的运行顺序并不总是有保证[…]不过,通常任务是按照您期望的顺序运行的。”--这很模糊,你知道在什么情况下可以依赖订单吗?你的第一个建议不适用于Copy
和Tar
任务类型。“没有执行任何操作。@操作员我不知道在什么情况下,您可以依赖于列出相关任务的顺序。@IgorGanapolsky您能详细说明一下吗?”?我已经验证了这确实适用于拷贝和Tar类型。是否有可能您没有运行干净的构建,并且任务是最新的?我不知道这是否是官方记录的行为,但根据我自己的测试,如果一个任务依赖于多个其他任务,它们将按字母顺序执行<代码>任务我的任务(依赖项:['aTask','bTask'])
和任务我的任务(依赖项:['bTask','aTask'])
做同样的事情:aTask
总是在bTask
$ gradle tests
:task1
Hello
:task2
World
:task3dependency
MR
:task3
QBert
:tests
BUILD SUCCESSFUL
task tests << {
task1.execute()
task2.execute()
task3.execute()
}
task allTests {
dependsOn tasks.withType(Test)
}