web-dev-qa-db-fra.com

Gradle: passage d'une variable d'une tâche à une autre

Je veux passer une variable d'une tâche à une autre, dans le même fichier build.gradle. Ma première tâche Gradle extrait le dernier message de validation et j'ai besoin que ce message soit transmis à une autre tâche. Le code est ci-dessous. Merci d'avance pour votre aide.

task gitMsg(type:Exec){
    commandLine 'git', 'log', '-1', '--oneline'
    standardOutput = new ByteArrayOutputStream()
    doLast {
       String output = standardOutput.toString()
    }
}

Je veux passer la variable "sortie" dans la tâche ci-dessous.

task notifyTaskUpcoming << {
    def to = System.getProperty("to")
    def subj = System.getProperty('subj') 
    def body = "Hello... "
    sendmail(to, subj, body)
}

Je veux incorporer le message git dans 'body'.

21
crystallinity

Vous pouvez définir une variable output en dehors de la méthode doLast, mais dans la racine du script, puis l'utiliser simplement dans d'autres tâches. Par exemple:

//the variable is defined within script root
def String variable

task task1 << {
    //but initialized only in the task's method
    variable = "some value"
}

task task2 << {
    //you can assign a variable to the local one
    def body = variable
    println(body)

    //or simply use the variable itself
    println(variable)
}
task2.dependsOn task1

Voici 2 tâches définies. Task2 dépend de Task1, cela signifie que le second ne fonctionnera qu'après le premier. Le variable de type String est déclaré dans la racine du script de génération et initialisé dans task1doLast méthode (note, << est égal à doLast). Ensuite, la variable est initialisée, elle pourrait être utilisée par n'importe quelle autre tâche.

12
Stanislav

Je pense que les propriétés globales doivent être évitées et gradle vous offre une belle façon de le faire en ajoutant des propriétés à une tâche:

task task1 {
     doLast {
          task1.ext.variable = "some value"
     }
}

task task2 {
    dependsOn task1
    doLast { 
        println(task1.variable)
    }
}
46
Rene Groeschke