2012-11-21 5 views
18

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

सिद्धांत रूप में, डूलास्ट कुछ ऐसा ही करना चाहिए, लेकिन कार्य के मुख्य निष्पादन के बाद डोलस्ट को कॉल करना चाहिए। लेकिन, धीरे-धीरे 1.2 में, यदि आप डोलस्ट को कॉल करते हैं और फिर मुख्य कार्य में कुछ जोड़ते हैं तो gradle.build फ़ाइल में, मुख्य कार्य आइटम अंतिम आइटम कहा जाता है। उदाहरण के लिए, निम्नलिखित Gradle निर्माण फ़ाइल:

task myTask 

myTask << { 
    println "myTask main execution block" 
} 

myTask.doFirst { 
println "myTask doFirst call one" 
} 

myTask.doFirst { 
    println "myTask doFirst call two" 
} 

myTask.doLast { 
    println "myTask doLast" 
} 

myTask << { 
    println "myTask more main execution block" 
} 

निम्नलिखित उत्पादन का उत्पादन:

:myTask 
myTask doFirst call two 
myTask doFirst call one 
myTask main execution block 
myTask doLast 
myTask more main execution block 

BUILD SUCCESSFUL 

Total time: 1.585 secs 

मेरा प्रश्न यह है: यह doLast के इरादे बस कार्य के अंत पर चरणों संलग्न करने के लिए है (शुरुआत की तरह पहली बार शुरुआत करता है)? यदि ऐसा है, तो DoLast doFirst के साथ समरूपता प्रदान करने के अपवाद के साथ व्यर्थ लगता है। एक उपयोगकर्ता अंत में कुछ जोड़ने के लिए myTask < < {...} कर सकता है। मैंने सोचा होगा कि DoLast यह सुनिश्चित करेगा कि मुख्य निष्पादन ब्लॉक के बाद कोई भी "doLast" आइटम किया जाएगा।

क्या यह केवल धीरे-धीरे जिस तरह से काम करना चाहिए, या यह एक बग है ?? (या मैं डोलस्ट को कॉल करने के बाद मुख्य निष्पादन ब्लॉक पर कुछ जोड़ने के लिए बेवकूफ़ हूं - जो कि किसी अन्य निष्पादन ब्लॉक में काम करने के बाद एक साधारण गलती थी)।

उत्तर

30

<<doLast के लिए उपनाम है, इसलिए सब कुछ यहां अपेक्षित काम करता है।