在gradle中执行期间多次运行同一任务
在gradle有没有可能有以下类似的产品在gradle中执行期间多次运行同一任务,gradle,Gradle,在gradle有没有可能有以下类似的产品 task enableMe() << { println "Enable" } task disableMe() << { shouldRunAfter 'taskAwork' println "Disable" } task taskAwork(){ shouldRunAfter 'enableMe' println "do work in A while disabled" } task
task enableMe() << {
println "Enable"
}
task disableMe() << {
shouldRunAfter 'taskAwork'
println "Disable"
}
task taskAwork(){
shouldRunAfter 'enableMe'
println "do work in A while disabled"
}
task taskA(dependsOn: disableMe, taskAwork, enableMe){
}
task taskBwork(){
shouldRunAfter 'enableMe'
println "do work in B while disabled"
}
task taskB(dependsOn: disableMe, taskBwork, enableMe){
}
task taskC(dependsOn: taskA, taskB){
}
但目前,禁用和启用仅运行一次。。是否仍要设置状态,以便它们可以再次运行
我能想到的唯一方法就是重复这些任务
task enableMeA() << {
println "Enable"
}
task disableMeA() << {
shouldRunAfter 'taskAwork'
println "Disable"
}
task enableMeB() << {
println "Enable"
}
task disableMeB() << {
shouldRunAfter 'taskBwork'
println "Disable"
}
task taskAwork(){
shouldRunAfter 'enableMeA'
println "do work in A while disabled"
}
task taskA(dependsOn: disableMeA, taskAwork, enableMeA){
}
task taskBwork(){
shouldRunAfter 'enableMeB'
println "do work in B while disabled"
}
task taskB(dependsOn: disableMeB, taskBwork, enableMeB){
}
task taskC(dependsOn: taskA, taskB){
}
默认情况下,Gradle不会运行最新的任务。 如果任务的属性未更改,则认为它是最新的 如果要在同一执行过程中多次运行任务,可以使用属性定义一个谓词,每当要再次运行任务时,该谓词将返回false:
task myTask() {
outputs.upToDateWhen {some_condition}
// Do some stuff
}
似乎,在您的情况下,您必须为您的任务实现,并使用它的
beforexecute
和afterExecute
方法来实现您的逻辑
这可能看起来像:
task taskAwork() << {
println "do work in A while disabled"
}
task taskBwork() << {
println "do work in B while disabled"
}
task doAllWorkTask(dependsOn: [taskAwork, taskBwork]){
}
gradle.taskGraph.addTaskExecutionListener new WorkTasksExecutionListener()
class WorkTasksExecutionListener implements TaskExecutionListener {
@Override
void afterExecute(final Task task, final TaskState state) {
if (task.name.contains('work')) {
println('Enabling smth before execution of work task')
}
}
@Override
void beforeExecute(final Task task) {
if (task.name.contains('work')) {
println('Disabling smth after execution of work task')
}
}
}
这根本不起作用。设置此outputs.upToDateWhen{false}在“myTask”中,然后运行命令行(gradle myTask someothertask myTask)仅运行“myTask”一次。它应该运行“myTask”两次看看这个
task taskAwork() << {
println "do work in A while disabled"
}
task taskBwork() << {
println "do work in B while disabled"
}
task doAllWorkTask(dependsOn: [taskAwork, taskBwork]){
}
gradle.taskGraph.addTaskExecutionListener new WorkTasksExecutionListener()
class WorkTasksExecutionListener implements TaskExecutionListener {
@Override
void afterExecute(final Task task, final TaskState state) {
if (task.name.contains('work')) {
println('Enabling smth before execution of work task')
}
}
@Override
void beforeExecute(final Task task) {
if (task.name.contains('work')) {
println('Disabling smth after execution of work task')
}
}
}
:taskAwork
Enabling smth after execution of work task
do work in A while disabled
Disabling smth before execution of work task
:taskBwork
Enabling smth after execution of work task
do work in B while disabled
Disabling smth before execution of work task
:doAllWorkTask