มีวิธีใดบ้างที่ฉันสามารถบังคับให้งาน gradle ทำงานอีกครั้งหรือรีเซ็ตงานทั้งหมดกลับสู่สถานะที่ไม่ใช่ UP-TO-DATE
มีวิธีใดบ้างที่ฉันสามารถบังคับให้งาน gradle ทำงานอีกครั้งหรือรีเซ็ตงานทั้งหมดกลับสู่สถานะที่ไม่ใช่ UP-TO-DATE
คำตอบ:
พยายามเรียกใช้งานสร้างของคุณด้วย -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
และคุณต้องการบังคับให้สมมติว่า something2 ทำงานอีกครั้งคุณทำได้
someproject:cleanSometask2
ก่อนที่คุณจะรันงานที่รันมันทั้งหมด
เห็นได้ชัดว่าใน gradle ทุกงานที่เข้าใจ UP-TO-DATE ยังเข้าใจวิธีทำความสะอาดตัวเอง
ฉันมีกรณีที่ยากลำบากที่การตั้งค่า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 }
}
}
}