Кажется, я неправильно понимаю, как работает задача копирования.
Я знаю, что в обычном сценарии сборки вы должны использовать doLast
или doFisrt
, чтобы дождаться фазы выполнения. Моя проблема не здесь, это похоже, но в контексте класса.
Мой класс не относится к типу Copy, но я добавляю один doFirst
, который вызывает copy.
Неважно, что я делаю, чтобы сначала выполнить это, следующий процесс не находит файл, только при втором запуске (когда копирование выполнено).
Да, я попытался построить второе задание и поместил копию в действие @TaskAction
, в то время как у второго было dependsOn
.
Мне кажется, что это не тот случай, когда фаза жизненного цикла является неправильной, это поведение больше похоже на то, что project.copy является асинхронным. Однако я нигде не мог найти эту информацию.
В настоящее время у меня есть этот кусок в конструкторе задач
doFirst { copy() }
doLast { normalize() }
Пример
class Example extends DefaultTask {
Example() {
group = 'example'
description = 'big copy, but I need to wait'
doFirst { copy() }
doLast { normalize() }
}
void copy() {
project.copy {
def zipFile = zip
def outputDir = dir
from project.zipTree(zipFile)
into outputDir
}
}
void normalize() {
}
}