2012-09-07 22 views
29

की व्याख्या कैसे करें मैं ग्रैडल सीखने की कोशिश कर रहा हूं। सीखने की मेरी पसंदीदा शैली को कम स्तर पर समझना है कि क्या हो रहा है। इसके लिए मैं व्याख्या करने के लिए क्या DSL reference:ग्रैडल डीएसएल

task hello { 
    doLast { 
     println 'Hello world!' 
    } 
} 

मैं समझता हूँ कि इस स्क्रिप्ट एक Project के संदर्भ में निष्पादित किया जाता है के संबंध में दस्तावेज की example 6.1 में हो रहा है कोशिश कर रहा हूँ। तो मैं Projectdocumentation से देख सकता हूं कि कई ओवरलोडेड task(...) विधियां हैं। हस्ताक्षर को देखते हुए, मुझे उस व्यक्ति को चुनना होगा जिस पर अंतिम तर्क के रूप में बंद हो। और चूंकि हम यहां Map पास नहीं कर रहे हैं, इसलिए मुझे लगता है कि जिस विधि को बुलाया जा रहा है वह task(String name, Closure closure) है।

हालांकि, जिस हिस्से में मैं संघर्ष कर रहा हूं वह इस स्क्रिप्ट में, शाब्दिक स्ट्रिंग hello को String पर मैप किया गया है।

एक और उदाहरण example 6.7 है:

task taskX(dependsOn: 'taskY') << { 
    println 'taskX' 
} 

task taskY << { 
    println 'taskY' 
} 

यहाँ, मैं हम विधि का task(Map<String, ?> args, String name) प्रपत्र कॉल कर रहे हैं मान। लेकिन,

  1. फिर, कैसे शाब्दिक स्ट्रिंग taskX ऊपर एक String के रूप में खत्म हो रहा है?
  2. यह देखते हुए कि Map शाब्दिक बनाने के लिए ब्रांड्स का उपयोग नहीं किया जाता है, तो ब्रांड्स में भाग Map होने का अंत कैसे होता है?
  3. यदि मैंने सही तरीके से यह पता लगाया है कि कौन सी विधि कह रही है, तो क्या डीएसएल दस्तावेज की तुलना में स्क्रिप्ट में गलत क्रम में दिए गए तर्क नहीं हैं?
  4. कोष्ठक का उपयोग कर वाक्यविन्यास एक विधि कॉल की तरह पूरी दुनिया के लिए दिखता है। अज्ञात विधि के रूप में taskX को हल करने के लिए Project ऑब्जेक्ट पर प्रतिनिधिमंडल का संकेत हो सकता है। लेकिन, AFAIK, विधिवत कॉल को task पर विधि कॉल के तुरंत बाद विधिवत रूप से मान्य नहीं किया जाएगा।

जैसा कि आप देख सकते हैं कि मैं थोड़ा उलझन में हूं कि कैसे उदाहरण वाक्यविन्यास डीएसएल संदर्भ मार्गदर्शिका के लिए नीचे नक्शा करता है, जो वास्तव में समझने के लिए थोड़ा मुश्किल बना रहा है कि घास के स्तर पर क्या हो रहा है ।

धन्यवाद!

+1

मुझे आपके जैसा ही भ्रम है। और मुझे उम्मीद है कि ग्रेडलेवेयर कुछ स्पष्टीकरण प्रदान कर सकता है। – peacepassion

+0

यह पूछताछ अधिक जानकारी हो सकती है। [ग्रोवी कार्य परिभाषा में ग्रोवी सिंटैक्स] (http://stackoverflow.com/questions/27584463/understanding-the-groovy-syntax-in-a-gradle-task-definition/27584555#27584555) – user3875388

+0

संभावित डुप्लिकेट [समझना एक ग्रेडल कार्य परिभाषा में ग्रोवी सिंटैक्स] (https://stackoverflow.com/questions/27584463/understanding-the-groovy-syntax-in-a-gradle-task-definition) – tkruse

उत्तर

17

task foo कार्य घोषणा वाक्यविन्यास की विविधता विशेष है कि इसे एक ग्रोवी कंपाइलर प्लगइन का उपयोग करके लागू किया गया है। जहां तक ​​मुझे पता है, यह एकमात्र ऐसा मामला है जहां एक विशेष वाक्यविन्यास का समर्थन करने के लिए एक कंपाइलर प्लगइन का उपयोग किया जाता है।

+4

दिलचस्प। मैं ग्रोवी के लिए अपेक्षाकृत नया हूं और उन चीज़ों में से एक जो मुझे पसंद नहीं है, यह पता लगाना कितना मुश्किल है कि लोगों ने "चालाक" सामान क्यों किया है - आम तौर पर उनके डीएसएल को उपयोग/लिखने में आसान बनाने के लिए। क्या आपके पास कोई विशिष्ट सलाह है कि मैं एक स्क्रिप्ट और डीएसएल संदर्भ मार्गदर्शिका के बीच अनुवाद (मेरे सिर में) के बारे में कैसे जा सकता हूं? – dty

+0

सिंटैक्स उपयोगकर्ता मार्गदर्शिका और डीएसएल संदर्भ में दोनों दस्तावेज है; ध्यान दें कि वे कार्य * कीवर्ड * के बारे में कैसे बोलते हैं। पूर्व-निरीक्षण में, यह शीर्ष पर थोड़ा सा हो सकता है, हालांकि यह गैर-जादू विकल्पों की तुलना में बेहतर पढ़ता है। जैसा कि मैंने कहा, यह एक दुर्लभ अपवाद है। यह देखते हुए कि आपने विश्लेषण किया कि यहां कुछ "गलत" होना चाहिए, आप ग्रैडल के डीएसएल के कवर के तहत जो कुछ भी हो रहा है उसे समझने के अपने रास्ते पर अच्छी तरह से हैं। –

+0

धन्यवाद पीटर। एक आखिरी सवाल, अगर मैं कर सकता हूं। क्या आप मुझे इस कंपाइलर प्लगइन को क्रिया में देखने के लिए वें ग्रैडल स्रोत में सही जगह पर इंगित कर सकते हैं? – dty

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