<<
एक बाएं-शिफ्ट ऑपरेटर है। इस परिदृश्य में, task "task$counter"
एक Task
ऑब्जेक्ट घोषणा है, और <<
को doLast
विधि के उपनाम के रूप में अधिभारित किया गया है, जो कार्य निष्पादित करते समय निष्पादित करने के लिए क्रियाओं की सूची को बंद करने में संलग्न होता है।
आप <<
निर्दिष्ट नहीं करते हैं, बंद एक configuration closure माना जाता है और, अपने प्रोजेक्ट की build lifecycle के विन्यास चरण के दौरान डिफ़ॉल्ट रूप से निष्पादित किया जाएगा जो कुछ भी कार्य तर्क कमांड लाइन पर दिया जाता है की परवाह किए बिना।
उदाहरण:
आप विन्यास सवाल में निर्दिष्ट लेते हैं:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
और चलाने gradle task3
, उत्पादन होगा:
:task3
I'm task number 3
क्योंकि प्रत्येक बंद परिभाषित किया गया था कार्य के लिए विशिष्ट निष्पादन कार्रवाई होने के लिए। चूंकि task3
को निष्पादित करने के कार्य के रूप में नामित किया गया था, यह निष्पादित एकमात्र कार्य बंद था।
लेकिन अगर आप <<
हटाने और विन्यास बनाने के इस प्रकार है:
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
और gradle task3
चलाने के लिए, उत्पादन तो हो जाएगा:
I'm task number 0
I'm task number 1
I'm task number 2
I'm task number 3
:task3 UP-TO-DATE
इसका कारण यह है सब बंद को परिभाषित किया गया कार्यों को स्वयं कॉन्फ़िगर करें, कार्यों को चलाने के दौरान क्रियाओं के रूप में निष्पादित नहीं किया जाएगा। तो इस मामले में, ग्रैडल ने परियोजना को कॉन्फ़िगर करते समय सभी बंदियों को निष्पादित किया, फिर जब कोtask3
निष्पादित करने का समय आया, तो प्रदर्शन करने के लिए कोई कार्रवाई नहीं हुई, इसलिए इसने कार्य को UP-TO-DATE
के रूप में बताया।
यह धीरे-धीरे है कि ऑपरेटर को कार्रवाई में कार्य जोड़ने के लिए ओवरलोड किया गया है, है ना? –
एक कार्य सिर्फ ग्रोवी में बंद है, है ना? –
हां, यह इस कक्षा में बिल्कुल अधिभारित है: 'org.gradle.api.internal.AbstractTask'। जब यह दूसरे प्रश्न की बात आती है, बिल्कुल नहीं।एक कार्य हमेशा 'डिफॉल्टटास्क' वर्ग का एक उदाहरण होता है (या एक वर्ग जो 'डिफॉल्टटास्क' को बढ़ाता है (इसे एक * बंद * के रूप में परिभाषित किया जा सकता है, लेकिन उसे नहीं करना है) – Opal