2010-05-04 10 views
42

एक)ग्रेडल में इन कार्य परिभाषा वाक्यविन्यासों के बीच क्या अंतर है? चींटी बाहर गूँज 'का निर्माण' यहां तक ​​कि जब बस लिस्टिंग -

task build << { 
    description = "Build task." 
    ant.echo('build') 
} 

बी)

task build { 
    description = "Build task." 
    ant.echo('build') 
} 

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

उत्तर

54

पहला वाक्यविन्यास एक कार्य को परिभाषित करता है, और कार्य निष्पादित होने पर निष्पादित करने के लिए कुछ कोड प्रदान करता है। दूसरा वाक्यविन्यास एक कार्य को परिभाषित करता है, और कार्य को कॉन्फ़िगर करने के लिए सीधे कुछ कोड निष्पादित करने के लिए प्रदान करता है। उदाहरण के लिए:

task build << { println 'this executes when build task is executed' } 
task build { println 'this executes when the build script is executed' } 

वास्तव में, पहली वाक्य रचना के बराबर है: उपरोक्त

task build { doLast { println 'this executes when build task is executed' } } 

तो, अपने उदाहरण में, वाक्य रचना एक के लिए विवरण क्योंकि कोड Gradle आयकर में दिखाई नहीं देता जो वर्णन कार्य निष्पादित होने तक निष्पादित नहीं किया जाता है, जो तब होता है जब आप gradle -t चलाते हैं।

वाक्य रचना बी के लिए कोड है कि करता है ant.echo() Gradle के हर मंगलाचरण के लिए चलाया जाता है, Gradle सहित

आयकर निष्पादित करने के लिए दोनों एक कार्रवाई और काम या तो आप क्या कर सकते हैं के लिए एक विवरण प्रदान करने के लिए का:

task build(description: 'some description') << { some code } 
task build { description = 'some description'; doLast { some code } } 
+1

तुम दोनों कोड कार्य के साथ-साथ कोड को कॉन्फ़िगर करना निष्पादित करने की आवश्यकता है कि जब काम कहा जाता है निष्पादित करने के लिए मिल गया है तो अगर, एक doLast बंद के साथ वाक्य रचना बी जाने का रास्ता है। – bergyman

+0

ऐसा लगता है कि '<<' कार्य परिभाषा वाक्यविन्यास को हटाया जा रहा है [ग्रैडल 3.0] (https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up- कार्य-डीएसएल और पदानुक्रम)? – mkobit

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