我可能会忽略一些非常核心/明显的东西,但是如何创建一个始终为每个任务/目标执行的任务?
我可以做类似的事情:
task someTask << {
println "I sometimes run"
}
println "I always run"
但是,在任务中使用始终运行的部分会更加可取。
我最接近的是:
task someTask << {
println "I sometimes run"
}
println "I always run"
void helloThing() {
println "I always run too. Hello?"
}
helloThing()
因此,使用某种方法是一种'好'的解决方案,但我希望有一种方法可以专门指定/重新使用任务。
希望有人有办法做到这一点。 :)
答案 0 :(得分:10)
假设目标是打印系统信息,您可以随时在配置阶段(在任务声明之外)打印信息,并且具有无效的虚拟任务systemStatus
(因为信息已打印)无论如何)。或者您可以将其作为常规任务实现,并确保始终通过添加":systemStatus"
作为gradle.startParameter.taskNames
的第一项(字符串列表)来运行任务,该项模拟总是键入{{1 }}。或者您可以利用gradle :systemStatus ...
之类的钩子在那里打印信息。
答案 1 :(得分:6)
这会为给定构建中的每个项目中的每个任务附加一个闭包:
def someClosure = { task ->
println "task executed: $task"
}
allprojects {
afterEvaluate {
for(def task in it.tasks)
task << someClosure
}
}
如果你需要每个构建只调用一次函数/闭包,之前所有项目的所有任务,请使用:
task('MyTask') << {
println 'Pre-build hook!'
}
allprojects {
afterEvaluate {
for(def task in it.tasks)
if(task != rootProject.tasks.MyTask)
task.dependsOn rootProject.tasks.MyTask
}
}
如果你需要每个构建只调用一次函数/闭包, 所有项目的所有任务,请使用:
task('MyTask') << {
println 'Post-build hook!'
}
allprojects {
afterEvaluate {
for(def task in it.tasks)
if(task != rootProject.tasks.MyTask)
task.finalizedBy rootProject.tasks.MyTask
}
}
答案 2 :(得分:0)
直接从根build.gradle
调用它有什么问题?
task init << {
println "I always run"
}
tasks.init.execute()