2010-03-02 11 views
18

एक ग्रेले स्क्रिप्ट बनाने का सबसे अच्छा तरीका क्या है, जो एक ग्रोवी स्क्रिप्ट चलाता है? मुझे लगता है कि Gradle निर्माण फ़ाइलों ग्रूवी हैं, इसलिए मैं इसे इस तरह कुछ करने के लिए संभव हो जाएगा लगता होगा:ग्रेले के भीतर से groovy स्क्रिप्ट चलाएं

task run << { 
    Script app = new GroovyShell().parse(new File("examples/foo.groovy")) 
    // or replace .parse() w/ a .evalulate()? 
    app.run() 
} 

मैं whacky त्रुटियों के सभी प्रकार जब मैं यह कोशिश करता है, तो bar.groovy @Grab एनोटेशन का उपयोग कर रहा है या यहां तक ​​कि सरल आयात भी कर रहे हैं। मैं इसे संभालने के लिए एक ग्रेडल कार्य बनाना चाहता हूं, ताकि मैं उम्मीद कर सकूं क्लासपाथ परिभाषा का पुन: उपयोग करें।

क्या उदाहरण निर्देशिका कहीं भी निर्देशिका निर्देशिका में स्थानांतरित करना बेहतर होगा? सबसे अच्छा अभ्यास क्या है?

उत्तर

1

मुझे लगता है कि आप शायद एक नई प्रक्रिया के रूप में स्क्रिप्ट चलाने के लिए जरूरत है ... जैसे,

["groovy","examples/foo.groovy"].execute() 

मुझे लगता है कि होता है कि जिस तरह से Gradle निष्पादित किया जाता है groovy लागू के माध्यम से नहीं है, तो सेटअप है कि बनाता है @ पकड़ो काम कभी नहीं होता है। यह ग्रोवी का संस्करण भी हो सकता है कि ग्रैडल का उपयोग @Grab का समर्थन नहीं करता है।

+3

यहां अन्य सुझावों के विपरीत, यह आवश्यक है कि उपयोगकर्ता के पास ग्रोवी की एक स्वतंत्र स्थापना हो । ग्रैडल "ग्रोवी", "groovy.bat", आदि प्रदान नहीं करता है। यह ग्रैडल के साथ बनाए गए ऐप्स के लिए एक अस्वीकार्य आवश्यकता है, क्योंकि ग्रेडल सिस्टम को स्वतंत्र रूप से स्थापित करने की आवश्यकता को खत्म करने के लिए उपयोग किया जाता है। – Blaine

7

आप ग्रोवीशेल के बजाय ग्रोवीस्क्रिप्टइंजिन का उपयोग करने का प्रयास कर सकते हैं। मैंने इसे पहले @Grab एनोटेशन के साथ उपयोग किया है। आपको कक्षा के सभी ग्रोवी की आवश्यकता होगी, groovy-all.jar पर्याप्त नहीं होगा। मुझे लगता है कि आइवी groovy-all.jar में पैक नहीं किया गया है। कुछ इस तरह चाल करने के लिए करना चाहिए:

यह स्क्रिप्ट /tmp/HelloWorld.groovy

पर
def pathToFolderOfScript = '/tmp' 
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[]) 
gse.run('HelloWorld.groovy', new Binding()) 
12

एक ग्रूवी स्क्रिप्ट मान लिया जाता है या फिर आप कर सकता है:

new GroovyShell().run(file('somePath')) 
संबंधित मुद्दे