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)
}
}