Чи є спосіб я змусити завдання Gradle запуститись знову або повернути всі завдання назад до стану, НЕ ДО ДАТИ?
Чи є спосіб я змусити завдання Gradle запуститись знову або повернути всі завдання назад до стану, НЕ ДО ДАТИ?
Відповіді:
Спробуйте запустити свою збірку за допомогою -C rebuild
цього відновлення кешу Gradle.
У новіших версіях Gradle використовуйте --rerun-tasks
Якщо ви хочете завжди виконувати лише одне завдання, ви можете встановити outputs
властивість всередині завдання.
outputs.upToDateWhen { false }
Майте на увазі, що якщо у вашій задачі немає визначених файлових входів, Gradle може пропустити завдання навіть при використанні вищевказаного коду. Наприклад, у Zip або Copy завдання має бути принаймні один файл, наданий у фазі конфігурації визначення завдання.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Можна використовувати cleanTaskname
Скажімо, у вас є
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
І ви хочете змусити, скажімо, sometask2 запустити знову ви можете
someproject:cleanSometask2
перед тим, як запустити завдання, яке виконує все це.
Мабуть, в градусі, кожне завдання, яке розуміє НАДНІСТЬ, також розуміє, як почистити себе.
У мене був складний випадок, коли налаштування outputs.upToDateWhen { false }
всередині завдання або додавання прапора --rerun-tasks
не допомогло, оскільки завдання setOnlyIf
було встановлено false
кожен раз, коли я його виконував.
Додавання наступного до build.gradle
примусового виконання myTask
:
gradle.taskGraph.whenReady { taskGraph ->
def tasks = taskGraph.getAllTasks()
tasks.each {
def taskName = it.getName()
if(taskName == 'myTask') {
println("Found $taskName")
it.setOnlyIf { true }
it.outputs.upToDateWhen { false }
}
}
}