क्या कोई ऐसा तरीका है जिससे मैं एक फिर से काम को चलाने के लिए मजबूर कर सकता हूं, या सभी कार्यों को वापस नहीं कर सकता हूं न कि यूपी-टू-डेट राज्य को?
क्या कोई ऐसा तरीका है जिससे मैं एक फिर से काम को चलाने के लिए मजबूर कर सकता हूं, या सभी कार्यों को वापस नहीं कर सकता हूं न कि यूपी-टू-डेट राज्य को?
जवाबों:
अपने निर्माण को चलाने की कोशिश करें, -C rebuild
जो ग्रैडल के कैश का पुनर्निर्माण करता है।
ग्रेडेल के नए संस्करणों में, उपयोग करें --rerun-tasks
यदि आप चाहते हैं कि केवल एक ही कार्य हमेशा चले, तो आप outputs
संपत्ति को कार्य के अंदर सेट कर सकते हैं।
outputs.upToDateWhen { false }
कृपया ध्यान रखें कि यदि आपके कार्य में कोई निर्धारित फ़ाइल इनपुट नहीं है, तो ग्रेड उपरोक्त कार्य का उपयोग करते हुए भी कार्य छोड़ सकता है। उदाहरण के लिए, जिप या कॉपी कार्य में टास्क डेफिनिशन के कॉन्फ़िगरेशन चरण में कम से कम एक फ़ाइल प्रदान करने की आवश्यकता होती है ।
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
और आप बलपूर्वक कह सकते हैं कि someask2 को फिर से चलाने के लिए आप कर सकते हैं
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 }
}
}
}