Adakah cara agar saya dapat memaksa tugas gradle untuk dijalankan lagi, atau mengatur ulang semua tugas kembali ke status bukan UP-TO-DATE?
Adakah cara agar saya dapat memaksa tugas gradle untuk dijalankan lagi, atau mengatur ulang semua tugas kembali ke status bukan UP-TO-DATE?
Jawaban:
Coba jalankan build Anda yang akan membangun -C rebuild
kembali cache Gradle.
Di versi Gradle yang lebih baru, gunakan --rerun-tasks
Jika Anda hanya ingin satu tugas untuk selalu dijalankan, Anda dapat menyetel outputs
properti di dalam tugas.
outputs.upToDateWhen { false }
Perlu diketahui bahwa jika tugas Anda tidak memiliki input file yang ditentukan, Gradle dapat melewati tugas tersebut, bahkan saat menggunakan kode di atas. Misalnya, dalam tugas Zip atau Salin harus ada setidaknya satu file yang disediakan dalam fase konfigurasi definisi tugas.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Kamu bisa memakai cleanTaskname
Katakanlah Anda punya
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
Dan Anda ingin memaksa katakanlah sesuatu harus berjalan lagi, Anda bisa
someproject:cleanSometask2
sebelum Anda menjalankan tugas yang menjalankan semuanya.
Ternyata di gradle, setiap tugas yang paham UP-TO-DATE juga paham cara membersihkan dirinya.
Saya mengalami kasus sulit di mana pengaturan outputs.upToDateWhen { false }
di dalam tugas atau menambahkan bendera --rerun-tasks
tidak membantu karena tugas setOnlyIf
terus diatur ke false
setiap kali saya menjalankannya.
Menambahkan berikut ini untuk build.gradle
memaksa eksekusi 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 }
}
}
}