यूपी-टू-डेट संपत्ति की ग्रेडिंग कार्यों को रीसेट करना?


106

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

जवाबों:


133

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

ग्रेडेल के नए संस्करणों में, उपयोग करें --rerun-tasks


89

यदि आप चाहते हैं कि केवल एक ही कार्य हमेशा चले, तो आप outputsसंपत्ति को कार्य के अंदर सेट कर सकते हैं।

outputs.upToDateWhen { false }

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


14
यह मेरे लिए कुछ नहीं करता है। मैंने इसे एक कार्य में जोड़ा और "UP-TO-DATE" प्राप्त किया। मजेदार बात यह है कि यह एक ZipTask है और मैंने गंतव्य संग्रह को हटा दिया है।
माआर्टिनस

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

केस के लिए अद्यतन उत्तर जब कार्य नहीं चलेगा।
सेमीकिन्टी

खबरदार है कि आजकल जब कैन्डल निर्मित कैश सक्षम किया जाता है तो यह कार्य को फिर से चलाने का कारण नहीं होगा, लेकिन इसका आउटपुट अभी कैश के साथ बहाल किया जाएगा।
स्टीफन फ्रेडरिक

25

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

मान लीजिए कि आपके पास है

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

और आप बलपूर्वक कह ​​सकते हैं कि someask2 को फिर से चलाने के लिए आप कर सकते हैं

someproject:cleanSometask2

इससे पहले कि आप यह सब चलाने वाले कार्य को चलाएं।

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


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

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

1
आम तौर पर 'क्लीन' टास्क जो $ बिल्डडायर में हर डिलीट करता है, बिल्ड स्क्रिप्ट में उपलब्ध है क्योंकि इसे बेस प्लगइन द्वारा पेश किया जाता है।
रेन ग्रेशके

5

मेरे पास एक कठिन मामला था जहां 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 }
    }
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.