Gradle任务能否同时用dependsOn与mustRunAfter?两种写法是否等效?
Gradle任务依赖与执行顺序问题解答
1. 能否同时使用dependsOn和mustRunAfter?你的配置是否正确?
完全可以同时使用这两个API定义任务依赖和执行顺序,你的代码逻辑是正确的:
dependsOn 'foo', 'bar', 'toy'确保执行MyTask时,会触发foo、bar、toy三个任务执行bar.mustRunAfter('foo')和toy.mustRunAfter('bar')强制指定了三个任务的执行顺序为foo→bar→toy
小优化建议:推荐用tasks.named()替代tasks.findByName(),它会返回Provider,能避免任务未创建时的空指针风险,修改后的代码如下:
tasks.register('MyTask') { dependsOn 'foo', 'bar', 'toy' tasks.named('bar').configure { it.mustRunAfter('foo') } tasks.named('toy').configure { it.mustRunAfter('bar') } }
2. 两段MyTask2的代码是否等效?
这两段代码不等效,核心差异在于任务依赖关系:
第一段代码:
tasks.register('MyTask2') { dependsOn 'hello' tasks.findByName('MyTask2').mustRunAfter('hello') }同时完成两个操作:
- 让
MyTask2依赖hello,执行MyTask2时会自动触发hello执行 - 强制
MyTask2在hello执行完成后再运行
- 让
第二段代码:
tasks.register('MyTask2') { mustRunAfter('hello') }仅定义执行顺序约束:如果
hello和MyTask2同时被安排执行,MyTask2会在hello之后运行;但MyTask2不依赖hello,单独执行MyTask2时,hello不会被触发执行。
内容的提问来源于stack exchange,提问作者SyncMaster
相关产品推荐
相关产品推荐

