Gradle: передача переменной из одной задачи в другую

Я хочу передать переменную из одной задачи в другую, в том же файле build.gradle. Моя первая задача gradle вызывает последнее сообщение фиксации, и мне нужно, чтобы это сообщение передавалось другой задаче. Код ниже. Благодарим за помощь заранее.

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

Я хочу передать переменную 'output' в задание ниже.

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

Я хочу включить сообщение git в 'body'.

Ответ 1

Вы можете определить переменную output вне метода doLast, но в script root, а затем просто использовать ее в других задачах. Например:

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

task task1 << {
    //but initialized only in the task 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

Здесь заданы две задачи. Task2 зависит от Task1, это означает, что второй будет работать только после первого. variable для типа String объявляется в build script root и инициализируется методом Task1 doLast (примечание, << равно doLast). Затем переменная инициализируется, ее можно использовать любой другой задачей.

Ответ 2

Я думаю, что глобальные свойства следует избегать, а gradle предлагает вам хороший способ сделать это, добавив свойства к задаче:

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

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