आप कुछ कोड के रूप में एक Gradle निर्माण स्क्रिप्ट के बारे में सोच सकते हैं जो किसी ऑब्जेक्ट को दिया गया है जो उसमें लिखित विधि कॉल का जवाब दे सकता है।
स्क्रिप्ट, ग्रूवी वाक्यात्मक चीनी का एक बहुत का उपयोग करता है तो उन्हें हटाने, यह इस तरह दिखना चाहिए:
तो स्क्रिप्ट वास्तव में विधि का एक समूह कॉल किया जाता है:
def apply(Map)
def android(Closure)
def dependencies(Closure)
यह android(Closure)
एक बंद प्राप्त होगा और एक वस्तु जो इन तरीकों का जवाब कर सकते हैं करने के तरीकों में यह कहा जाता प्रतिनिधि होगा:
def compileSdkVersion(Integer)
def buildToolsVersion(String)
...
को देखते हुए कि, हम पार्स स्क्रिप्ट कर सकते हैं, इसे किसी ऑब्जेक्ट और टी को प्रतिनिधि दें मुर्गी इसे निष्पादित करें।
DelegatingBaseScript
का उपयोग करके प्रतिनिधि इसे करने का एक तरीका है (सुनिश्चित नहीं है कि ग्रैडल इस तरह से करता है)।
import org.codehaus.groovy.control.CompilerConfiguration
gradleScript = '''
apply plugin: 'com.android.application'
android({
compileSdkVersion(21)
buildToolsVersion("21.1.2")
})'''
class PocketGradle {
def config = [apply:[]].withDefault { [:] }
def apply(map) {
config.apply << map.plugin
}
def android(Closure closure) {
closure.delegate = new Expando(
compileSdkVersion: { Integer version ->
config.android.compileSdkVersion = version
},
buildToolsVersion : { String version ->
config.android.buildToolsVersion = version
},
)
closure()
}
}
def compiler = new CompilerConfiguration(scriptBaseClass: DelegatingScript.class.name)
shell = new GroovyShell(this.class.classLoader, new Binding(), compiler)
script = shell.parse gradleScript
script.setDelegate(gradle = new PocketGradle())
script.run()
assert gradle.config == [
apply: ['com.android.application'],
android: [
compileSdkVersion: 21,
buildToolsVersion: '21.1.2'
]
]
आप Groovy Web Console
में स्क्रिप्ट को निष्पादित ("कंसोल में संपादित करें" क्लिक करें और फिर "स्क्रिप्ट निष्पादित") कर सकते हैं: यहाँ एक नीचे dumbed काम कर संस्करण है।
वाक्य रचना स्पष्टीकरण के अधिकांश DSL section में हैं:
- कमान चेन
ग्रूवी आप शीर्ष-स्तर स्टेटमेंट के लिए एक विधि कॉल के तर्कों के आसपास कोष्ठकों को छोड़ देता है। "कमांड चेन" सुविधा हमें इस तरह के कोष्ठक मुक्त विधि कॉल करने की इजाजत देकर विस्तारित करती है, जिसके लिए न तो तर्कों के चारों ओर कोष्ठक की आवश्यकता होती है, न ही जंजीर कॉल के बीच बिंदु।
ग्रोवी ConfigSlurper
भी है, लेकिन मुझे यकीन नहीं है कि यह ग्रैडल चाहे जहां तक जा सके।
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं –