我有一个自定义Gradle插件,它将从模板文件生成Java文件。我在不同的位置有几个这样的模板文件,我需要“编译”所有这些文件来生成我需要的Java文件。有了这些文件后,我想将它们打包成.jar。
我的第一个想法是我从其他任务中执行自定义插件中的“编译”任务。类似的东西:
task compileFromLocationA <<{
compileTemplate.execute()...
}
task compileFromLocationB
...
packageJar(depends: compileFromLocationA, compileFromLocationB)
...
但是,您无法以编程方式从另一个任务中调用任务。我听说我可以使用dependsOn
或finalizedBy
解决这个问题,但我无法弄清楚如何在这里应用这些关键字。对于这样的事情,“最佳实践”是什么?我是Gradle的新手,并且无法使用官方文档。
答案 0 :(得分:2)
您可以使用dependsOn
来完成此操作。
这是一个例子:
apply plugin: 'java'
task taskA <<{
println 'task A'
}
task taskB (type:Copy){
println 'B'
}
task taskC (type:Copy){
println 'C'
}
task taskBC (dependsOn:['taskB','taskC'])<<{
println 'BC'
}
taskBC.mustRunAfter taskA
您还可以使用mustRunAfter
确保任务始终在另一项任务之后运行。
答案 1 :(得分:1)
你可以:
1)一些功能包含在“普通”Groovy函数中:
def doSomething() {
// ...
}
task taskA {
description = 'Description for this task'
doLast {
doSomething()
}
}
2)在任务之间使用mustRunAfter
(小心,这可能会变得混乱,具体取决于您的配置大小)
task taskA {
description = 'Description for task A'
doLast {
// ...
}
}
task taskB {
description = 'Description for task B'
doLast {
// ...
}
}
taskB.mustRunAfter taskA
3)在任务之间使用dependsOn
task taskA {
description = 'Description for task A'
doLast {
// ...
}
}
task taskB(dependsOn: taskA) {
description = 'Description for task B'
doLast {
// ...
}
}