मैं कस्टम प्लगइन कार्य बना रहा हूं और ऐसी स्थिति में आ गया हूं जहां मुझे कुछ मदद की ज़रूरत है। मैं 3 कार्य बनाता हूं। टास्क ए, बी, सी ग्रेडल में। ए या बी को सफलता मिलने पर ही टास्क सी को अंजाम दिया जाना चाहिए। ध्यान दें कि ए और बी 2 अलग-अलग कार्य हैं और संबंधित नहीं हैं।
class A extends DefaultTask { }
class B extends DefaultTask { }
class C extends DefaultTask { }
अगर मैं C.dependsOn(A); C.dependsOn(B);
का प्रयास करता हूं, तो मुझे लगता है कि C, A और B (A या B) दोनों पर निर्भर है। क्या यहां A या B शर्त निर्दिष्ट करने का कोई तरीका है।
2 जवाब
ग्रैडल कार्य निर्भरता और आदेश देने के लिए चार तरीके (और संबंधित कंटेनर) प्रदान करता है:
शैली: t1.<method>(t2)
dependsOn
- सुनिश्चित करता है, किt2
को if और पहलेt1
निष्पादित किया जाता है।finalizedBy
- सुनिश्चित करता है किt2
if और बादt2
निष्पादित किया गया है।mustRunAfter
- सुनिश्चित करता है, कि यदि दोनोंt2
औरt1
निष्पादित किए जाते हैं (अन्य ट्रिगर के कारण),t1
बाद< /मजबूत>t2
।shouldRunAfter
- मूल रूप सेmustRunAfter
के समान, लेकिन विशेष मामलों के लिए इसे अनदेखा किया जा सकता है (चेक करें दस्तावेज़)।
आपकी आवश्यकता विशेष है और उपरोक्त जैसी सरल विधि से हल नहीं होगी। अगर मैं आपके प्रश्न को सही समझता हूं, तो आप यह सुनिश्चित करना चाहते हैं कि कार्य ए और बी के बाद कार्य सी निष्पादित हो जाए, लेकिन केवल तभी इसे निष्पादित किया जाएगा (और इसे स्वचालित रूप से ट्रिगर नहीं किया जाएगा)। आवश्यकता के इस पहले भाग के लिए आप mustRunAfter
का उपयोग कर सकते हैं। हालाँकि, आप यह भी सुनिश्चित करना चाहते हैं कि या तो कार्य A या कार्य B पहले निष्पादित किया गया था। मैं सुझाव देता हूं कि कार्य सी के लिए कार्य निष्पादन को छोड़ने के लिए onlyIf
विधि का उपयोग करें, यदि न तो ए या बी को पहले निष्पादित किया गया था। उदाहरण:
task A { }
task B { }
task C {
mustRunAfter A, B
onlyIf { A.state.executed || B.state.executed }
}
आप कई निर्भरताएँ जोड़ सकते हैं।
task B << {
println 'Hello from B'
}
task C << {
println 'Hello from C'
}
task D(dependsOn: ['B', 'C'] << {
println 'Hello from D'
}
आउटपुट है:
> gradle -q D
Hello from B
Hello from C
Hello from D