2011-09-02 8 views
77

क्या कोई तरीका है कि मैं फिर से चलाने के लिए एक ग्रेबल कार्य को मजबूर कर सकता हूं, या सभी कार्यों को वापस यूपी-टू-डेट स्थिति में रीसेट कर सकता हूं?नवीनीकरण कार्यों की यूपी-टू-डेट संपत्ति को रीसेट करना?

उत्तर

92

-C rebuild के साथ अपना निर्माण चलाने का प्रयास करें जो ग्रैडल के कैश का पुनर्निर्माण करता है।

Gradle के नए संस्करण में, --rerun-tasks

23

आप उपयोग कर सकते हैं cleanTaskname

मान लीजिए कि आप

:someproject:sometask1 UP-TO-DATE 
:someproject:sometask2 UP-TO-DATE 
:someproject:sometask3 UP-TO-DATE 

करते हैं और आप के लिए मजबूर करने का कहना sometask2 फिर आप

someproject:cleanSometask2 

कि चलाता है इससे पहले कि आप काम चला सकते हैं चलाने के लिए करते हैं चाहते हैं यह सब।

स्पष्ट रूप से धीरे-धीरे, यूपी-टू-डेट को समझने वाले प्रत्येक कार्य को यह भी समझते हैं कि खुद को कैसे साफ किया जाए।

+0

यह निश्चित रूप से काम करता है:

जोड़ना build.gradle के लिए निम्न myTask के निष्पादन के लिए मजबूर किया। क्या कोई "साफ" कार्य है? –

+0

'gradle clean' आपके द्वारा प्रोजेक्ट के लिए सब कुछ साफ़ कर देगा। यह मूल रूप से आपके मुख्य आउटपुट फ़ोल्डर को हटा देता है जो डिफ़ॉल्ट रूप से '/ build' है। क्या यह वही है जिसकी आपको तलाश थी? –

+5

नहीं। यदि किसी दिए गए कार्य के लिए आउटपुट फ़ाइलों के रूप में अप-टू-डेट कैप्चर नहीं किया गया था, तो यह अद्यतित नहीं होगा। यही है, अगर मेरे पास बिल्ड ब्रेक का कुछ हिस्सा था लेकिन समग्र रूप से सफल हुआ, तो कब्जा कर लिया गया राज्य गलत है, और मुझे इसे साफ़ करने की आवश्यकता है। –

66

का उपयोग आप बस एक ही काम के लिए हमेशा चलाना चाहते हैं, तो आप काम के अंदर outputs गुण सेट कर सकते हैं।

outputs.upToDateWhen { false } 

कृपया, तब भी जब ऊपर कोड का उपयोग कर के बारे में पता है, तो अपने कार्य को किसी भी परिभाषित फ़ाइल आदानों नहीं है, Gradle कार्य को छोड़ सकते हैं कि हो सकता है। उदाहरण के लिए, ज़िप या प्रतिलिपि कार्य में कार्य परिभाषा के कॉन्फ़िगरेशन चरण में प्रदान की गई कम से कम एक फ़ाइल होने की आवश्यकता है।

+12

यह मेरे लिए कुछ भी नहीं करता है। मैंने इसे एक कार्य में जोड़ा और "यूपी-टू-डेट" प्राप्त किया। मजाकिया बात यह है कि यह एक ज़िपटास्क है और मैंने गंतव्य संग्रह हटा दिया है। – maaartinus

+4

यह इस तरह के उपयोग के लिए अविश्वसनीय है: 'tasks.whenTaskAdded {theTask -> यदि (theTask.name.startsWith (" dex ")) { theTask.outputs.upToDateWhen {false} theTask.doLast {task ->। ..}}} ' –

+0

यह मेरे लिए काम नहीं करता है :( –

1

मैं कहाँ outputs.upToDateWhen { false } कार्य के अंदर स्थापित करने या झंडा --rerun-tasks के बाद से काम के setOnlyIffalse हर बार मैं इसे दौड़ा करने के लिए स्थापित किया जा रहा रखा मदद नहीं की जोड़ने एक कठिन मामला था।

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 } 
    } 
    } 
} 
संबंधित मुद्दे