我正在创建一个.gradle
文件,以便在项目构建期间自动执行一系列手动操作。
我正在尝试使用dependsOn
、mustRunAfter
和doLast
强制执行任务排序。但是,我没有得到所需的输出。
这是我的.gradle文件,其中包含一些虚拟任务和打印语句,以显示我所拥有的内容。
tasks.register('setupProjectTasks') {
println 'Debug 1 sPT'
dependsOn 'task1'
doLast {
exec {
println 'Run shell script'
commandLine '/path/a.sh'
}
}
}
tasks.register('task1') {
println 'Debug 2 task'
dependsOn 'someCleanup'
dependsOn 'depA'
tasks.findByName('depA').mustRunAfter('someCleanup')
doLast {
println 'restart' // Restart tomcat here
}
}
tasks.register('someCleanup') {
println 'Debug 3 some cleanup'
dependsOn 'subTask1'
dependsOn 'subTask2'
}
tasks.register('depA') {
println 'depA'
dependsOn 'subTaskA1'
dependsOn 'subTaskA2'
tasks.findByName('subTaskA2').mustRunAfter('subTaskA1')
doLast {
println 'depA done'
}
}
tasks.register('subTask1') {
println 'subtask 1'
}
tasks.register('subTask2') {
println 'subtask 2'
}
tasks.register('subTaskA1') {
println 'subtask A1'
}
tasks.register('subTaskA2') {
println 'subtask A2'
}
字符串
这是我希望完成的任务。
- setupProjectTasks
- task1 (First 'someCleanup', and then 'depA', and 'restart' at the end
- someCleanup (the order between subTask1 and subTask2 doesn't matter)
- depA (below should be executed in the exact order)
- subTaskA1
- subTaskA2
- depA done (print line)
- restart (print line)
- Run shell script (print line and run shell script)
型
我总是希望按照指定的顺序运行所有这些任务。我理解dependsOn
和mustRunAfter
是如何工作的。但我似乎没有让他们以正确的方式为我工作。
这是我得到的输出
Debug 1 sPT
Debug 2 task
depA
subtask A2
Debug 3 some cleanup
subtask A1
subtask 1
subtask 2
> Task :depA
depA done
> Task :task1
restart
> Task :setupProjectTasks
Run shell script
Hi
型
我错过了什么?提前感谢!
1条答案
按热度按时间svgewumm1#
我想你误解了Gradle和它的任务概念。因为Gradle中的任务不能有层次结构。你也没有能力在另一个任务中运行任务。Gradle中的任务应该做一件小事,或者可能是大事。
也许使用方法而不是任务会更好。
要订购任务,您只需要使用
dependsOn
。下面是我创建的一个示例,向您展示它如何成为-link。