Question

J'oublie probablement quelque chose d'assez fondamental/évident, mais comment puis-je créer une tâche qui sera toujours exécutée pour chaque tâche/cible ?

Je peux faire quelque chose comme :

task someTask << {
    println "I sometimes run"
}
println "I always run"

Mais il serait bien plus souhaitable d'avoir une partie toujours active dans une tâche.

Le plus proche que je connaisse est :

task someTask << {
    println "I sometimes run"
}

println "I always run"

void helloThing() {
    println "I always run too. Hello?"
}

helloThing()

Donc, utiliser une méthode est une solution « correcte », mais j'espérais qu'il y aurait un moyen de désigner/réutiliser spécifiquement une tâche.

J'espère que quelqu'un a un moyen de le faire.:)

Était-ce utile?

La solution

En supposant que l'objectif soit d'imprimer les informations système, vous pouvez soit toujours imprimer les informations lors de la phase de configuration (en dehors d'une déclaration de tâche), et créer une tâche factice. systemStatus cela ne fait rien (car les informations sont imprimées de toute façon).Ou vous pouvez l'implémenter comme une tâche régulière et vous assurer que la tâche est toujours exécutée en ajoutant ":systemStatus" comme premier élément de gradle.startParameter.taskNames (une liste de chaînes), qui simule quelqu'un qui tape toujours gradle :systemStatus ....Ou vous pouvez tirer parti d'un crochet tel que gradle.projectsLoaded { ... } pour y imprimer les informations.

Autres conseils

Ceci attache une fermeture à chaque tâche de chaque projet de la construction donnée:

def someClosure = { task ->
  println "task executed: $task"
}

allprojects {
  afterEvaluate {
    for(def task in it.tasks)
      task << someClosure
  }
}

Si vous avez besoin de la fonction / la fermeture pour être appelée une fois par construction, avant toutes les tâches de tous les projets, utilisez ceci:

task('MyTask') << {
  println 'Pre-build hook!'
}

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

Si vous avez besoin de la fonction / la fermeture à appeler une seule fois par construction, après toutes les tâches de tous les projets, utilisez ceci:

task('MyTask') << {
  println 'Post-build hook!'
}

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

What's wrong with invoking it straight from the root build.gradle?

task init << {
    println "I always run"
}

tasks.init.execute()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top