从gradle中的任务调用另一个任务
我在用Gradle。我有两个任务:“a”和“b”。我希望任务“a”调用任务“b”。我该怎么做从gradle中的任务调用另一个任务,gradle,build.gradle,Gradle,Build.gradle,我在用Gradle。我有两个任务:“a”和“b”。我希望任务“a”调用任务“b”。我该怎么做 task b(type: Exec) { description "Task B" commandLine 'echo', 'task-b' } task a(type: Exec) { description "Task A" commandLine 'echo', 'task-a' // TODO: run task b } 在Ant中,这是小菜一碟: &
task b(type: Exec) {
description "Task B"
commandLine 'echo', 'task-b'
}
task a(type: Exec) {
description "Task A"
commandLine 'echo', 'task-a'
// TODO: run task b
}
在Ant中,这是小菜一碟:
<target name="a">
<echo message="task-a"/>
<antcall target="b"/>
</target>
<target name="b">
<echo message="task-b"/>
</target>
但是,这仅在我运行gradle任务时有效,如下所示:
gradle -q a b
这也不理想
是否可以直接从现有任务调用另一个任务?正如建议的那样,一种方法是为任务添加终结器
task beta << {
println 'Hello from beta'
}
task alpha << {
println "Hello from alpha"
}
// some condition
if (project.hasProperty("doBeta")) {
alpha.finalizedBy beta
}
你可以用
a.dependsOn 'b'
或
或
等
请参见以总结并合并@JBirdVegas和@lance java的答案,使用非弃用的
doLast
而不是leftShift(它工作正常,但提供了一个警告,因为此版本中使用了弃用的Gradle功能,使其与Gradle 5.0不兼容
我使用的是gradle版本4.7。因此,这意味着您在build.gradle中添加的一些功能将无法像在gradle 5.0中那样工作
使用命令行参数--warning mode=all运行Gradle构建,查看不推荐使用的功能的确切内容
它将为您提供所发现问题的详细描述,并提供指向Gradle文档的链接,以了解如何修复您的构建。关于终结器任务,这里的答案非常好:
$ gradle -q alpha
Hello from alpha
$ gradle -q alpha -PdoBeta
Hello from alpha
Hello from beta
a.dependsOn 'b'
a.dependsOn b
task a(type: Exec, dependsOn: 'b') { ... }
task beta {
doLast {
println 'Hello from beta'
}
}
task alpha {
doLast {
println 'Hello from alpha'
}
}
// some condition
if (project.hasProperty('doBeta')) {
alpha.finalizedBy beta // run 'beta' after 'alpha'
// or
// alpha.dependsOn beta // run 'beta' before 'alpha'
}