Gradle: Variable von einer Aufgabe zur anderen übergeben

Lesezeit: 2 Minuten

Benutzer-Avatar
Kristallinität

Ich möchte eine Variable in derselben build.gradle-Datei von einer Aufgabe an eine andere übergeben. Meine erste Gradle-Aufgabe zieht die letzte Commit-Nachricht, und ich muss diese Nachricht an eine andere Aufgabe übergeben. Der Code ist unten. Danke für Hilfe im Voraus.

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

Ich möchte die Variable ‘output’ in die folgende Aufgabe übergeben.

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

Ich möchte die Git-Nachricht in ‘body’ integrieren.

Ich denke, globale Eigenschaften sollten vermieden werden, und Gradle bietet Ihnen eine gute Möglichkeit, dies zu tun, indem Sie Eigenschaften zu einer Aufgabe hinzufügen:

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

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

  • Schön, eine andere Methode zu kennen – danke! Warum sollten globale Eigenschaften vermieden werden?

    – Kristallinität

    24. November 2015 um 16:21 Uhr

  • weil es einfach zu leicht ist, den Kontext zu verlieren, warum eine globale Eigenschaft verwendet wurde. Indem die Variable direkt an die Aufgabe gebunden ist, die sie erzeugt, ist sie meiner Meinung nach näher am allgemeinen OO-Design und leichter zu verfolgen. (nur meine 2 Cent hier)

    – Rene Groeschke

    24. November 2015 um 16:29 Uhr

  • Aha. Cool – nochmals vielen Dank für deine Zeit und deinen Input =)

    – Kristallinität

    24. November 2015 um 16:59 Uhr

  • funktioniert nicht mit gradle 4.4. Versucht aber fehlgeschlagen. irgendwelche hinweise?

    – Chaosguru

    12. Februar 2018 um 14:50 Uhr

  • @chaosguru Warum schlägt es fehl? Übrigens, rein task1 man kann sich nur darauf beziehen ext Anstatt von task1.ext

    – Bart van Heukelom

    23. Februar 2018 um 16:01 Uhr

Sie können ein definieren output Variable außerhalb der doLast -Methode, aber im Skriptstamm und verwenden Sie sie dann einfach in anderen Aufgaben. Nur zum Beispiel:

//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

Hier sind 2 Aufgaben definiert. Task2 kommt drauf an Task1, das heißt, der zweite läuft erst nach dem ersten. Das variable vom Typ String wird im Stammverzeichnis des Build-Skripts deklariert und in initialisiert task1 doLast Methode (beachten Sie, << ist gleich doLast). Dann wird die Variable initialisiert, sie könnte von jeder anderen Task verwendet werden.

  • Vielen Dank! Ich hätte das unbedingt ausprobieren sollen … sehr geschätzt! =)

    – Kristallinität

    24. November 2015 um 16:11 Uhr

  • Danke für dieses tolle Beispiel. Hut ab, Bruder!

    – Martin Pfeffer

    27. August 2017 um 1:17 Uhr

  • Wenn Sie surfen, sehen Sie sich das Beispiel unten an, das besser ist.

    – Ben Liyanage

    27. September 2018 um 15:47 Uhr

1215680cookie-checkGradle: Variable von einer Aufgabe zur anderen übergeben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy