एक ग्रेडल बिल्ड फ़ाइल में, किसी विशेष कार्य के लिए निष्पादित वस्तुओं को निर्दिष्ट करने के कई तरीके हैं। 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" आइटम किया जाएगा।
क्या यह केवल धीरे-धीरे जिस तरह से काम करना चाहिए, या यह एक बग है ?? (या मैं डोलस्ट को कॉल करने के बाद मुख्य निष्पादन ब्लॉक पर कुछ जोड़ने के लिए बेवकूफ़ हूं - जो कि किसी अन्य निष्पादन ब्लॉक में काम करने के बाद एक साधारण गलती थी)।