Creating a task that runs before all other tasks in gradle

I need to create an initialization task that will be executed before any other task when it is executed.

task A {
    println "Task A"
}

task initializer {
   println "initialized"
}

If I execute gradle -q A, the output will be:

>initialized

>Task A

Now, if I add:

task B {
    println "Task B"
}

Run gradle -q Band I get:

>initialized

>Task B

So, no matter what task I perform, it is always “initialized” first.

+4
source share
2 answers

You can do each task whose name is NOT an "initializer", depends on the task "initializer". For instance:

task initializer {
   doLast { println "initializer" }
}

task task1() {
   doLast { println "task1" }
}

// make every other task depend on 'initializer'
// matching() and all() are "live" so any tasks declared after this line will also depend on 'initializer'
tasks.matching { it.name != 'initializer' }.all { Task task ->
    task.dependsOn initializer
}

task task2() {
   doLast { println "task2" }
}

BuildListener ( , : Gradle.buildStarted(...))

+4

, , , ?

, , main build.gradle:

allprojects {
  afterEvaluate {
    for(def task in it.tasks)
      if(task != rootProject.tasks.YourTask)
      task.dependsOn rootProject.tasks.YourTask
  }
}

tasks.matching {it != YourTask}.all {it.dependsOn YourTask}

. , .

0

Source: https://habr.com/ru/post/1681761/


All Articles