Yah*_*din 26 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
}
Run Code Online (Sandbox Code Playgroud)
在Ant中,这是小菜一碟:
<target name="a">
<echo message="task-a"/>
<antcall target="b"/>
</target>
<target name="b">
<echo message="task-b"/>
</target>
Run Code Online (Sandbox Code Playgroud)
我尝试的第一种方法是使用"dependsOn"功能.然而,这并不理想,因为我们需要反过来考虑所有任务,还有其他几个问题(比如满足条件时运行任务).
我尝试的另一种方法是:
b.mustRunAfter(a)
Run Code Online (Sandbox Code Playgroud)
但是这只有在我运行这样的gradle任务时才有效:
gradle -q a b
Run Code Online (Sandbox Code Playgroud)
哪个也不理想.
无论如何只是从现有任务中调用另一个任务?
JBi*_*gas 18
如建议的那样,一种方法是为任务添加终结器
task beta << {
println 'Hello from beta'
}
task alpha << {
println "Hello from alpha"
}
// some condition
if (project.hasProperty("doBeta")) {
alpha.finalizedBy beta
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以根据需要执行其他任务.至于从其他任务执行任务,你不能这样做.任务声明声明不是必要的.因此,任务可以依赖于另一个任务,但是它们不能执行另一个任务.
$ gradle -q alpha
Hello from alpha
$ gradle -q alpha -PdoBeta
Hello from alpha
Hello from beta
Run Code Online (Sandbox Code Playgroud)
fri*_*mle 15
总结和组合来自@JBirdVegas和@lance-java的答案,使用非弃用doLast而不是leftShift(<<):
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'
}
Run Code Online (Sandbox Code Playgroud)
lan*_*ava 14
您可以使用
a.dependsOn 'b'
Run Code Online (Sandbox Code Playgroud)
要么
a.dependsOn b
Run Code Online (Sandbox Code Playgroud)
要么
task a(type: Exec, dependsOn: 'b') { ... }
Run Code Online (Sandbox Code Playgroud)
等等
请参阅向任务添加依赖项
| 归档时间: |
|
| 查看次数: |
46056 次 |
| 最近记录: |