Чи є спосіб я змусити завдання 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 }
}
}
}