2014-09-28 10 views

उत्तर

19

मूल रूप से यह leftShift ऑपरेटर है - आप अधिक जानकारी here प्राप्त कर सकते हैं।

Gradle << ऑपरेटर में एक विशेष कार्य को कार्रवाई जोड़ने के लिए प्रयोग किया जाता है। कार्य के निष्पादन के दौरान एक कार्य में कई क्रियाएं होती हैं (क्रम में वे जोड़े गए थे)। << केवल कार्यों के कार्यों के संग्रह में एक क्रिया जोड़ता है। कार्यों और कार्यों के बारे में अधिक जानकारी here मिल सकती है।

+0

यह धीरे-धीरे है कि ऑपरेटर को कार्रवाई में कार्य जोड़ने के लिए ओवरलोड किया गया है, है ना? –

+1

एक कार्य सिर्फ ग्रोवी में बंद है, है ना? –

+1

हां, यह इस कक्षा में बिल्कुल अधिभारित है: 'org.gradle.api.internal.AbstractTask'। जब यह दूसरे प्रश्न की बात आती है, बिल्कुल नहीं।एक कार्य हमेशा 'डिफॉल्टटास्क' वर्ग का एक उदाहरण होता है (या एक वर्ग जो 'डिफॉल्टटास्क' को बढ़ाता है (इसे एक * बंद * के रूप में परिभाषित किया जा सकता है, लेकिन उसे नहीं करना है) – Opal

30

<< एक बाएं-शिफ्ट ऑपरेटर है। इस परिदृश्य में, 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 के रूप में बताया।

+2

यह टिप्पणी मेरे दिन बचाती है! – SexyNerd

+1

ग्रेट स्पष्टीकरण @ हेनीनी –

संबंधित मुद्दे