मैं कस्टम प्लगइन कार्य बना रहा हूं और ऐसी स्थिति में आ गया हूं जहां मुझे कुछ मदद की ज़रूरत है। मैं 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 शर्त निर्दिष्ट करने का कोई तरीका है।

1
SIVA_J 22 अगस्त 2017, 21:11

2 जवाब

सबसे बढ़िया उत्तर

ग्रैडल कार्य निर्भरता और आदेश देने के लिए चार तरीके (और संबंधित कंटेनर) प्रदान करता है:

शैली: t1.<method>(t2)

  1. dependsOn - सुनिश्चित करता है, कि t2 को if और पहले t1 निष्पादित किया जाता है।

  2. finalizedBy - सुनिश्चित करता है कि t2 if और बाद t2 निष्पादित किया गया है।

  3. mustRunAfter - सुनिश्चित करता है, कि यदि दोनों t2 और t1 निष्पादित किए जाते हैं (अन्य ट्रिगर के कारण), t1 बाद< /मजबूत> t2

  4. shouldRunAfter - मूल रूप से mustRunAfter के समान, लेकिन विशेष मामलों के लिए इसे अनदेखा किया जा सकता है (चेक करें दस्तावेज़)।

आपकी आवश्यकता विशेष है और उपरोक्त जैसी सरल विधि से हल नहीं होगी। अगर मैं आपके प्रश्न को सही समझता हूं, तो आप यह सुनिश्चित करना चाहते हैं कि कार्य ए और बी के बाद कार्य सी निष्पादित हो जाए, लेकिन केवल तभी इसे निष्पादित किया जाएगा (और इसे स्वचालित रूप से ट्रिगर नहीं किया जाएगा)। आवश्यकता के इस पहले भाग के लिए आप mustRunAfter का उपयोग कर सकते हैं। हालाँकि, आप यह भी सुनिश्चित करना चाहते हैं कि या तो कार्य A या कार्य B पहले निष्पादित किया गया था। मैं सुझाव देता हूं कि कार्य सी के लिए कार्य निष्पादन को छोड़ने के लिए onlyIf विधि का उपयोग करें, यदि न तो ए या बी को पहले निष्पादित किया गया था। उदाहरण:

task A { }
task B { }

task C {
    mustRunAfter A, B
    onlyIf { A.state.executed || B.state.executed }
}
2
Lukas Körfer 23 अगस्त 2017, 10:39

आप कई निर्भरताएँ जोड़ सकते हैं।

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
0
Gabriele Mariotti 22 अगस्त 2017, 21:51