Кажется, это все из-за разных этапов жизненного цикла.Вы можете прочитать больше об этом здесь .
Прежде всего, когда вы создаете задачу типа Exec
или любого вида без <<
, все в его теле - это конфигурация задачии выполняется в pahse конфигурации сборки.Вот почему в вашем выводе появляются сообщения типа started task getDumpFromRemotePostgres
.
Во-вторых, исполняемый файл, который вы запускаете, выполняется на этапе выполнения, после того, как все задачи задачи уже выполнены.И именно поэтому dump script started
появляется после того, как все настройки выполнены.
В вашем случае вам не нужно объявлять patchPostgresDumpFile
как задачу Exec
, потому что вы на самом деле не вызываетелюбой исполняемый файл, но нужно запустить некоторую логику.Для этого вам нужно переместить эту логику в замыкание doLast
, чтобы запустить ее на этапе выполнения.Примерно так:
task patchPostgresDumpFile() {
dependsOn getDumpFromRemotePostgres
doLast {
println 'started task patchPostgresDumpFile'
def dbDumpFileName = 'dump.sql'
File dumpFile = file(dbDumpFileName)
def line
dumpFile.withReader { reader ->
while ((line = reader.readLine()) != null) {
//parse and modify
}
println 'finished task patchPostgresDumpFile'
}
}
И обратите внимание, что ваше сообщение started task getDumpFromRemotePostgres
на самом деле не означает, что эта задача выполняется, а что она настраивается.Если вы хотите получать сообщения до и после выполнения, переместите их в замыкания doFirst
и doLast
в закрытии конфигурации задачи.