Задача Gradle Copy всегда актуальна
Моя задача gradle выглядит так
task xml_file_to_vs_build(type: Copy) {
outputs.upToDateWhen { false }
doLast {
outputs.upToDateWhen { false }
println("copying strings.xml");
from 'src/main/res/values'
into '../vso_build'
include 'strings.xml'
}
}
Задача всегда актуальна . Если я поставил блок на этапе конфигурации, т. е. из доласт, все отлично работает. Но тогда код выполняется, даже если я выполняю gradlew задачи, которые я не хочу. Что я делаю не так?
2 ответа:
Вы должны определить задачу следующим образом:
task xml_file_to_vs_build(type: Copy) { println("copying strings.xml") from 'src/main/res/values' into '../vso_build' include 'strings.xml' }
Задача копирования выполняется только в том случае, если ей нужно что-то скопировать. Указание ему, что копировать, является частью настройки задачи, и поэтому должно выполняться на этапе настройки, а не на этапе выполнения. Это очень важные понятия для понимания, и вы можете прочитать о них в руководстве пользователя Gradle или на форумах Gradle.
DoFirst и доласт блоков выполняется на этапе выполнения, в рамках выполнения задач. Оба слишком поздно, чтобы сказать, что задача скопировать: doFirst выполняется непосредственно перед основным действием задачи (которое в данном случае является копированием), но (вскоре) после пропущенных и обновленных проверок (которые основаны на конфигурации задачи). доласт исполняется после выполнения основного действия задачи, и поэтому явно слишком поздно.