अपाचे ग्रूवी

अपाचे ग्रूवी जावा (प्रोग्रामिंग लैंग्वेज) - प्लेटफॉर्म के लिए जावा-रचनाक्रम-संगत वस्तु अभिमुखित प्रोग्रामन लैंग्वेज है। यह एक स्थिर और गतिशील लैंग्वेज दोनों है, जिसमें पायथन (प्रोग्रामिंग लैंग्वेज), रूबी (प्रोग्रामिंग लैंग्वेज), और स्मॉलटाक जैसी विशेषताएं हैं। इसे जावा प्लेटफॉर्म के लिए प्रोग्रामिंग लैंग्वेज और स्क्रिप्टिंग लैंग्वेज दोनों के रूप में उपयोग किया जा सकता है, तथा इसे जावा आभासी मशीन (जेवीएम) बाईटकोड में संकलित किया जा सकता है, और अन्य जावा कोड और पुस्तकालयों (कम्प्यूटिंग) के साथ सहजता से अंतर्संचालन किया जा सकता है। ग्रूवी जावा के समान एक धनु कोष्ठक रचनाक्रम का उपयोग करता है। ग्रूवी संवरक (कंप्यूटर प्रोग्रामिंग), बहु श्रृंखला और श्रृंखला में अंतः स्थापित अभिव्यक्ति का समर्थन करता है। ग्रूवी की अधिकांश शक्ति इसके एएसटी रूपांतरणों में निहित है, जो एनोटेशन (टिप्पणी) के माध्यम से प्रवर्तित होती है।

ग्रूवी 1.0 को 2 जनवरी, 2007 को और ग्रूवी 2.0 को जुलाई, 2012 में प्रकाशित किया गया था। संस्करण 2 के बाद से, ग्रूवी को स्थिर रूप से संकलित किया जा सकता है, जो जावा के निकट प्रकार के अनुमान और प्रदर्शन की पेशकश करता है। निर्णायक सॉफ्टवेयर के प्रायोजन के तहत ग्रूवी 2.4 अंतिम प्रमुख प्रकाशन था जो मार्च 2015 में समाप्त हो गया। ग्रूवी ने तब से अपाचे सॉफ्टवेयर संस्था में एक परियोजना प्रबंधन समिति के लिए अपनी शासन संरचना को बदल दिया है।

इतिहास
जेम्स स्ट्रेचन (प्रोग्रामर) ने पहली बार अगस्त 2003 में अपने ब्लॉग पर ग्रूवी के विकास के बारे में बात की थी। मार्च 2004 में, ग्रूवी को, जेसीपी को जेएसआर 241 के रूप में प्रस्तुत किया गया और मतपत्र द्वारा स्वीकार किया गया था। 2004 और 2006 के बीच कई संस्करण प्रकाशित किए गए। जावा सामुदायिक प्रक्रिया (जेसीपी) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 1.0 नामक एक संस्करण 2 जनवरी, 2007 को प्रकशित किया गया। 7 अक्टूबर, 2007 को विभिन्न बीटा और प्रकशित उम्मीदवारों की संख्या 1.1 के बाद, ग्रूवी 1.1 अंतिम जारी किया गया था और किए गए कई बदलावों को प्रतिबिंबित करने के लिए तुरंत ग्रूवी 1.5 के रूप में पुन: नामित किया गया था।

2007 में, ग्रूवी ने जेएएक्स 2007 नवीनीकरण पुरस्कार में पहला पुरस्कार जीता। 2008 में, ग्रेल्स, एक ग्रूवी वेब ढांचा, ने जेएएक्स 2008 नवीनीकरण पुरस्कार में दूसरा पुरस्कार जीता था।

नवंबर 2008 में, स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (जी2वन) का अधिग्रहण कर लिया। अगस्त 2009 में वीएमवेयर ने स्प्रिंगसोर्स का अधिग्रहण किया।

अप्रैल 2012 में, आठ साल की निष्क्रियता के बाद, स्पेक लीड ने जेएसआर 241 की स्थिति को निष्क्रिय कर दिया।

2007 में ग्रूवी 1.0 प्रकशित होने से एक साल पहले स्ट्रेचन ने इस परियोजना को चुपचाप छोड़ दिया था। अक्टूबर 2016 में, स्ट्रेचन ने कहा "मुझे अभी भी ग्रूवी पसंद है (जेनकींस पाइपलाइन बहुत ग्रूवी हैं!), जावा, गो, टाइपस्क्रिप्ट और कोटलिन है।

2 जुलाई 2012 को, ग्रूवी 2.0 प्रकशित किया गया था, जिसमें अन्य नई सुविधाओं के साथ, स्थिर संकलन और स्थिर प्रकार की जाँच सम्मिलित थी।

जब अप्रैल 2013 में ईएमसी संस्था (ईएमसी) और वीएमवेयर द्वारा निर्णायक सॉफ्टवेयर संयुक्त उद्यम को अलग कर दिया गया, तो ग्रूवी और ग्रेल्स ने इसके उत्पाद पोर्टफोलियो का हिस्सा बना लिया। निर्णायक ने अप्रैल 2015 से ग्रूवी और ग्रेल्स को प्रायोजित करना बंद कर दिया। उसी महीने, ग्रूवी ने अपने ऊष्मायित्र के माध्यम से अपाचे सॉफ्टवेयर संस्था में कोडहॉस संग्रहालय से परियोजना प्रबंधन समिति (पीएमसी) में अपनी शासन संरचना को बदल दिया। ग्रूवी ने अपाचे के ऊष्मायित्र से स्नातक किया और नवंबर 2015 में एक शीर्ष-स्तरीय परियोजना बन गई।

विशेषताएं
अधिकांश मान्य जावा फ़ाइलें भी मान्य ग्रूवी फ़ाइलें हैं। हालाँकि दो भाषाएँ समान हैं, ग्रूवी कोड अधिक संक्षिप्त हो सकता है, क्योंकि इसमें उन सभी अवयवो की आवश्यकता नहीं होती है जिनकी जावा को आवश्यकता होती है। यह जावा प्रोग्रामर्स के लिए ग्रूवी कार्यरचना मुहावरों को प्राप्त करने से पहले परिचित जावा रचनाक्रम के साथ धीरे-धीरे ग्रूवी सीखना संभव बनाता है।

जावा में उपलब्ध ग्रूवी सुविधाओं में स्थिर और गतिशील टाइपिंग (कीवर्ड  के साथ) दोनों सम्मिलित हैं, संचालक ओवरलोडिंग, सूचियों और साहचर्य सरणियों (मानचित्रों) के लिए मूल समर्थन, नियमित अभिव्यक्तियों के लिए मूल समर्थन, बहुरूपी पुनरावृत्ति, स्ट्रिंग प्रक्षेप, अतिरिक्त सहायक तरीके और सुरक्षित नेविगेशन ऑपरेटर   अशक्त संकेत  के लिए स्वचालित रूप से जाँच करने के लिए (उदाहरण के लिए, , या  ) ये सभी सम्मिलित है।

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

ग्रूवी विभिन्न मार्कअप भाषाओं जैसे एक्सएमएल और एचटीएमएल के लिए मूल समर्थन प्रदान करता है, जो एक इनलाइन दस्तावेज़ वस्तु मॉडल (डीओएम्) सिंटैक्स के माध्यम से पूरा किया जाता है। यह सुविधा एक समान और संक्षिप्त सिंटैक्स और प्रोग्रामिंग पद्धति के साथ कई प्रकार की विषम डेटा संपत्तियों की परिभाषा और हेरफेर को सक्षम बनाती है।

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

ग्रूवीबीन्स, गुण
ग्रूवीबीन्स जावाबीन्स का ग्रूवी का संस्करण है। ग्रूवी निहित रूप से ग्राही और सुरेखक उत्पन्न करता है। निम्नलिखित कोड में,  तथा   निहित रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न विधियों को आमंत्रण कर  रही हैं। ग्रूवी सूची और मानचित्रों को संभालने के लिए सरल, सुसंगत सिंटैक्स प्रदान करता है, जो जावा के सरणी सिंटैक्स की याद दिलाता है।

आदिप्ररूप विस्तारण
ग्रूवी, विस्तारण मापांक (केवल ग्रूवी 2 में), ऑब्जेक्टिव-सी-जैसे श्रेणियाँ और   के माध्यम से आदिप्ररूप विस्तारण के लिए समर्थन प्रदान करता हैै।

रूबी के की ओपन क्लास अवधारणा के समान ,कक्षा में परिवर्तनों को आसानी से व्यक्त करने के लिए एक डोमेन-विशिष्ट लैंग्वेज (डीएसएल) प्रदान करता है, प्रोटोटाइप के माध्यम से कोड में ग्रूवी के परिवर्तन जावा में दिखाई नहीं दे रहे हैं, क्योंकि ग्रूवी में प्रत्येक विशेषता/विधि आमंत्रण मेटाक्लास रजिस्ट्री के माध्यम से जाता है। परिवर्तित कोड को केवल जावा से मेटाक्लास रजिस्ट्री में जाकर एक्सेस किया जा सकता है।

ग्रूवी दूसरों के बीच,    के रूप में ओवरराइडिंग विधियों की भी अनुमति देता है, जिससे डेवलपर को किसी ऑब्जेक्ट पर कॉल को इंटरसेप्ट करने और सरलीकृत पहलू-उन्मुख तरीके से उनके लिए एक क्रिया निर्दिष्ट करने में सक्षम बनाता है। निम्नलिखित कोड वर्ग  को    संपत्ति का जवाब देने में सक्षम बनाता है, ग्रेल्स फ्रेमवर्क जीओआरएम् गतिशील खोजकर्ताओं को सक्षम करने के लिए बड़े पैमाने पर मेटाप्रोग्रामिंग का उपयोग करता है, जैसे  और अन्य है।

बिंदु और कोष्ठक
ग्रूवी का रचनाक्रम कुछ स्थितियों में कोष्ठकों और बिंदुओं को छोड़ने की अनुमति देता है। निम्नलिखित ग्रूवी कोड take(coffee).with(sugar, milk).and(liquor) डोमेन-विशिष्ट भाषाओं (डीएसएल) के विकास को सक्षम करने वाले take coffee with sugar, milk and liquor के रूप में लिखा जा सकता है जो सादे अंग्रेजी की तरह दिखते हैं।

कार्यात्मक प्रोग्रामिंग
हालाँकि ग्रूवी ज्यादातर एक वस्तु-उन्मुख लैंग्वेज है, यह कार्यात्मक प्रोग्रामिंग सुविधाएँ भी प्रदान करती है।

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

एक निर्धारित प्रकार के संग्रह पर काम करते समय, संग्रह पर एक संचालन को बंद करने का अनुमान लगाया जा सकता है, list = [1, 2, 3, 4, 5, 6, 7, 8, 9] /*  * Non-zero numbers are coerced to true, so when it % 2 == 0 (even), it is false. * The type of the implicit "it" parameter can be inferred as an Integer by the IDE. * It could also be written as: * list.findAll { Integer i -> i % 2 } * list.findAll { i -> i % 2 } */ def odds = list.findAll { it % 2 } assert odds == [1, 3, 5, 7, 9] अभिव्यक्तियों के एक समूह को कार्यान्वयन के संदर्भ के बिना संवरण ब्लॉक में लिखा जा सकता है और प्रतिसाद देने वाली वस्तु को प्रतिनिधिमंडल का उपयोग करके बाद के बिंदु पर नियुक्त किया जा सकता है, // This block of code contains expressions without reference to an implementation def operations = { declare 5 sum 4 divide 3 print }

/*  * This class will handle the operations that can be used in the closure above. Another class * could be declared having the same methods, but using, for example, webservice operations * in the calculations. */ class Expression { BigDecimal value /*    * Though an Integer is passed as a parameter, it is coerced into a BigDecimal, as was * defined. If the class had a 'declare(Integer value)' method, it would be used instead. */  def declare(BigDecimal value) { this.value = value }  def sum(BigDecimal valueToAdd) { this.value += valueToAdd }  def divide(BigDecimal divisor) { this.value /= divisor }  def propertyMissing(String property) { if (property == "print") println value } }

// Here is defined who is going to respond the expressions in the block of code above. operations.delegate = new Expression operations

करी
आमतौर पर आंशिक आवेदन कहा जाता है, यह ग्रूवी फीचर संवरण के मापदंडों को उनके किसी भी तर्क में व्यतिक्रम मापदंडों पर सेट करने की अनुमति देता है, जिससे बाउंड वैल्यू के साथ एक नया संवरण बनता है। विधि में एक तर्क देने से तर्क एक ठीक हो जाएगा। N तर्क देने से तर्क 1 ठीक हो जाएगा ... N। def joinTwoWordsWithSymbol = { symbol, first, second -> first + symbol + second } assert joinTwoWordsWithSymbol(', 'Hello', 'World') == 'Hello def concatWords = joinTwoWordsWithSymbol.curry(' ') assert concatWords('Hello', 'World') == 'Hello World' def prependHello = concatWords.curry('Hello') //def prependHello = joinTwoWordsWithSymbol.curry(' ', 'Hello') assert prependHello('World') == 'Hello World' करी का उपयोग curry का उपयोग करके विपरीत दिशा (अंतिम N तर्कों को ठीक करते हुए) में भी किया जा सकता है। def power = { BigDecimal value, BigDecimal power -> value**power } def square = power.rcurry(2) def cube = power.rcurry(3) assert power(2, 2) == 4 assert square(4) == 16 assert cube(3) == 27 ग्रूवी दूसरों के बीच अनुयोगी मूल्यांकन ,कम/गुना, अनंत संरचना और अपरिवर्तनीयता का भी समर्थन करता है।

JSON और XML प्रसंस्करण
जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) और XML प्रसंस्करण पर, ग्रूवी बिल्डर पैटर्न को नियोजित करता है, जिससे डेटा संरचना का उत्पादन कम वर्बोज़ हो जाता है। उदाहरण के लिए, निम्नलिखित एक्सएमएल,   Java object oriented static  Ruby functional, object oriented duck typing, dynamic   Groovy functional, object oriented duck typing, dynamic, static</typing> </language> </languages> निम्नलिखित ग्रूवी कोड के माध्यम से उत्पन्न किया जा सकता है, def writer = new StringWriter def builder = new groovy.xml.MarkupBuilder(writer) builder.languages { language(year: 1995) { name "Java" paradigm "object oriented" typing "static" }  language (year: 1995) { name "Ruby" paradigm "functional, object oriented" typing "duck typing, dynamic" }  language (year: 2003) { name "Groovy" paradigm "functional, object oriented" typing "duck typing, dynamic, static" } } और स्ट्रीमिंगमार्कअपबिल्डर के माध्यम से स्ट्रीमिंग तरीके से भी संसाधित किया जा सकता है। जेएसओएन में कार्यान्वयन को बदलने के लिए, मार्कअपबिल्डर को जेसनबिल्डर में बदल दिया जा सकता है। def languages = new XmlSlurper.parseText writer.toString // Here is employed Groovy's regex syntax for a matcher (=~) that will be coerced to a // boolean value: either true, if the value contains our string, or false otherwise. def functional = languages.language.findAll { it.paradigm =~ "functional" } assert functional.collect { it.name } == ["Groovy", "Ruby"]

स्ट्रिंग प्रक्षेप
ग्रूवी में, Gस्ट्रिंग का उपयोग करके स्ट्रिंग्स को वेरिएबल्स और एक्सप्रेशंस के साथ इंटरपोलेट किया जा सकता है BigDecimal account = 10.0 def text = "The account shows currently a balance of $account" assert text == "The account shows currently a balance of 10.0" वेरिएबल्स और एक्सप्रेशन वाले Gस्ट्रिंग को दोहरे उद्धरण चिह्नों का उपयोग करके घोषित किया जाना चाहिए।

एक जटिल अभिव्यक्ति को घुंघराले ब्रैकेट में संलग्न किया जाना चाहिए। यह इसके कुछ हिस्सों को अभिव्यक्ति के बजाय आस-पास की स्ट्रिंग से संबंधित होने से रोकता है, BigDecimal minus = 4.0 text = "The account shows currently a balance of ${account - minus}" assert text == "The account shows currently a balance of 6.0" // Without the brackets to isolate the expression, this would result: text = "The account shows currently a balance of $account - minus" assert text == "The account shows currently a balance of 10.0 - minus" एरो सिंटैक्स को नियोजित करके अभिव्यक्ति मूल्यांकन को स्थगित किया जा सकता है, BigDecimal tax = 0.15 text = "The account shows currently a balance of ${->account - account*tax}" tax = 0.10 // The tax value was changed AFTER declaration of the GString. The expression // variables are bound only when the expression must actually be evaluated: assert text == "The account shows currently a balance of 9.000"

सार वाक्य रचना वृक्ष परिवर्तन
ग्रूवी के स्वयं के प्रलेखन के अनुसार, जब ग्रूवी कंपाइलर ग्रूवी स्क्रिप्ट और कक्षाओं को संकलित करता है, तो प्रक्रिया के किसी बिंदु पर, स्रोत कोड को कंक्रीट सिंटैक्स ट्री के रूप में मेमोरी में प्रदर्शित किया जाएगा, फिर एक सार सिंटैक्स ट्री में बदल दिया जाएगा। एएसटी ट्रांसफ़ॉर्मेशन का उद्देश्य डेवलपर्स को एएसटी को संशोधित करने में सक्षम होने के लिए संकलन प्रक्रिया में हुक करने देना है, जो कि जेवीएम द्वारा चलाए जाने वाले बायटेकोड में बदल जाएगा। एएसटी ट्रांसफॉर्मेशन ग्रूवी को बेहतर संकलन-समय मेटाप्रोग्रामिंग क्षमताओं के साथ प्रदान करता है, जिससे रनटाइम प्रदर्शन दंड के बिना लैंग्वेज स्तर पर शक्तिशाली लचीलेपन की अनुमति मिलती है।

ग्रूवी में एएसटी के उदाहरण हैं,


 * श्रेणी और मिक्सिन परिवर्तन
 * अपरिवर्तनीय एएसटी मैक्रो
 * परिवर्तन को नया रूप दें
 * सिंगलटन परिवर्तन

दूसरों के बीच में।

विशेषताएँ
ग्रूवी के प्रलेखन के अनुसार, विशेषता लैंग्वेज का एक संरचनात्मक निर्माण है जो अनुमति देता है व्यवहारों की संरचना, अंतरापृष्ठ के कार्यावधि कार्यान्वयन, व्यवहार अध्यारोही, और स्थिर प्रकार की जांच/संकलन के साथ संगतता।

लक्षणों को व्यतिक्रम कार्यान्वयन और स्थिति दोनों को ले जाने वाले अंतरापृष्ठ के रूप में देखा जा सकता है। विशेषता कीवर्ड का उपयोग करके एक विशेषता को परिभाषित किया गया है, trait FlyingAbility { /* declaration of a trait */ String fly { "I'm flying!" } /* declaration of a method inside a trait */ फिर, इसे कीवर्ड उपकरण का उपयोग करके एक सामान्य अंतरापृष्ठ की तरह इस्तेमाल किया जा सकता है, class Bird implements FlyingAbility {} /* Adds the trait FlyingAbility to the Bird class capabilities */ def bird = new Bird /* instantiate a new Bird */

assert bird.fly == "I'm flying!" /* the Bird class automatically gets the behavior of the FlyingAbility trait */ लक्षण सरल संरचना से परीक्षण तक क्षमताओं की एक विस्तृत श्रृंखला की अनुमति देते हैं।

अभिग्रहण
ग्रूवी अभिग्रहण के उल्लेखनीय उदाहरणों में सम्मिलित हैं,
 * एडैप्टाविस्ट स्क्रिप्टरनर, दुनिया भर के 20000 से अधिक संगठनों द्वारा उपयोग किए जाने वाले एटलसियन टूल्स को स्वचालित और विस्तारित करने के लिए ग्रूवी कार्यान्वयन को एम्बेड करता है।
 * अपाचे OFBiz, खुला स्रोत उद्यम संसाधन योजना (ईआरपी) प्रणाली, ग्रूवी का उपयोग करता है।
 * नीलगिरी, एक क्लाउड प्रबंधन प्रणाली, ग्रूवी की एक महत्वपूर्ण मात्रा का उपयोग करती है।
 * ग्रेडल ग्रूवी का उपयोग करके एक लोकप्रिय बिल्ड ऑटोमेशन टूल है।
 * लिंक्डइन अपने कुछ उप-प्रणालियों के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।
 * लॉजिकमॉनिटर, एक क्लाउड-आधारित निगरानी प्लेटफ़ॉर्म, स्क्रिप्ट-आधारित डेटा स्रोतों में ग्रूवी का उपयोग करता है।
 * जेनकिंस, निरंतर एकीकरण के लिए एक मंच। संस्करण 2 के साथ, जेनकींस में एक पाइपलाइन प्लगइन सम्मिलित है जो ग्रूवी में लिखे जाने वाले निर्देशों के निर्माण की अनुमति देता है।
 * लिफ़ेरे,उनके कलियो कार्य प्रगति में ग्रूवी का उपयोग करता है
 * बड़े पैमाने पर ऑनलाइन मीडिया सामग्री प्रदान करने के लिए Sky.com ग्रूवी और ग्रेल्स का उपयोग करता है।
 * स्मार्ट थिंग्स, स्मार्ट घरों और उपभोक्ता चीजों की इंटरनेट के लिए एक खुला मंच, ग्रूवी के सुरक्षा-उन्मुख सबसेट का उपयोग करता है
 * सोपूआई ग्रूवी को वेबसर्विस परीक्षण विकास के लिए एक लैंग्वेज के रूप में प्रदान करता है।
 * सुरवता, एक बाजार अनुसंधान उद्घाटन,, ग्रूवी और ग्रेल्स का उपयोग करता है।
 * यूरोपीय पेटेंट कार्यालय (ईपीओ) ने प्रत्येक देश के पेटेंट कार्यालय के साथ संचार करने के लिए प्रक्रियाओं में समानता का लाभ उठाने और उन्हें एक एकल, सार्वभौमिक प्रक्रिया में बदलने के लिए ग्रूवी में एक डेटा प्रवाह कार्यरचना लैंग्वेज विकसित की।
 * हालांकि ग्रूवी को किसी भी जेवीएम वातावरण में एकीकृत किया जा सकता है, JBoss सीम फ्रेमवर्क ग्रूवी को जावा के अलावा, एक विकास लैंग्वेज के रूप में, बॉक्स से बाहर प्रदान करता है।
 * vCalc.com अपने गणित क्राउड-सोर्सिंग इंजन में सभी उपयोगकर्ता परिभाषित गणित के लिए ग्रूवी का उपयोग करता है।
 * Wired.com वेबसाइट के उत्पाद समीक्षा स्टैंडअलोन अनुभाग के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।
 * XWiki SAS अपने सहयोगी खुला स्त्रोत उत्पाद में ग्रूवी को स्क्रिप्टिंग लैंग्वेज के रूप में उपयोग करता है।

आईडीई समर्थन
कई एकीकृत विकास वातावरण (आईडीई) और पाठ संपादक ग्रूवी का समर्थन करते हैं,


 * एंड्रॉइड स्टूडियो, आईडीई का उपयोग एंड्रॉइड ऐप बनाने के लिए किया जाता है
 * परमाणु संपादक
 * ग्रहण, ग्रूवी-ग्रहण के माध्यम से
 * ईमैकस, ग्रूवी-ईमैकस-मोड प्रक्षेपण के ग्रूवी-मोड का उपयोग करते हुए।
 * इंटेलीज आइडिया, सामुदायिक संस्करण, ग्रेल्स/ग्रिफ्फॉन केवल अल्टीमेट एडिशन में
 * JDeveloper, ओरेकल एडीएफ के साथ प्रयोग के लिए
 * jEdit, जावा प्लेटफॉर्म के लिए एक उन्नत पाठ संपादक
 * केडीई के लिए एक उन्नत पाठ संपादक केट ग्रूवी और 200 से अधिक अन्य फ़ाइल स्वरूपों का समर्थन करता है
 * नेटबीन्स, संस्करण 6.5 के बाद से
 * नोटपैड++ ++, माइक्रोसॉफ़्ट विंडोज़ के लिए एक उन्नत पाठ संपादक
 * उदात्त पाठ, एक संकरीकरण प्लेटफॉर्म पाठ संपादक
 * टेक्स्टमैट
 * दृष्टि स्टूडियो कोड
 * अल्ट्राएडिट, सामान्य प्रयोजन प्रोग्राम संपादक

उपभाषा
ग्रूवी का एक वैकल्पिक कार्यान्वयन है,


 * ग्रूस्क्रिप्ट ग्रूवी कोड को जावास्क्रिप्ट कोड में परिवर्तित करता है। हालाँकि अपाचे ग्रूवी की तुलना में ग्रूस्क्रिप्ट की कुछ सीमाएँ हैं, यह परिवेषक और ग्राहक दोनों में प्रक्षेत्र कक्षाओ का उपयोग कर सकता है। ग्रेल्स संस्करण 3.0 के लिए प्लगइन समर्थन प्रदान किया गया है, साथ ही ऑनलाइन कोड रूपांतरण भी प्रदान किया गया है।

यह भी देखें

 * प्रोग्रामिंग भाषाओं की तुलना
 * ग्रिफॉन (संरचना) - एक डेस्कटॉप संरचना
 * जीरो प्रक्षेपण
 * स्पॉक (परीक्षण संरचना)