पृष्ठभूमि के लिए ग्रोवीशेल ऑब्जेक्ट कैसे बनाएं, मैं इस महान example का उपयोग करके एक डीएसएल पार्सर लिखने के साथ प्रयोग कर रहा हूं। दुर्भाग्य से जब मैं अपने खुद के अनुप्रयोग में उपयोग के लिए इस लाइन अनुकूलन:संदर्भ ऐप के क्लासपाथ
Script dslScript = new GroovyShell().parse(dsl.text)
मैं कार्यावधि में वर्ग संकल्प त्रुटियों मिलता है, के रूप में मेरे डीएसएल डोमेन फ़ाइलें कोड अन्य बाहरी कक्षाओं का संदर्भ देता है है। संदर्भ ऐप में इन कक्षाओं तक पहुंच है, लेकिन मुझे नहीं पता कि नई ग्रोवीशेल ऑब्जेक्ट तक उन्हें कैसे पहुंचाया जा सकता है, या वैकल्पिक रूप से किसी भी तरह से फ़ाइल को पार्स करने के लिए संदर्भ ऐप के रनटाइम पर्यावरण का उपयोग करें। public GroovyShell(ClassLoader parent)
:
हाँ देखें। Grails में यह एक समान समाधान के लिए आया था: स्क्रिप्ट dslScript = new groovyShell (grailsAplication.classLoader) .parse (dsl.text) –
क्या यह पर्मस्पेस के साथ समस्याओं को हल करता है, जहां यह कक्षा की जानकारी छोड़ देता है और आप दौड़ सकते हैं अंत में पर्मस्पेस से बाहर? यहां देखें: http://stackoverflow.com/questions/24169976/understanding-groovy-grails-classloader-leak https://issues.apache.org/jira/browse/GROOVY-2875 इस प्रकार मुझे आश्चर्य है कि यह है या नहीं सर्वर ऐप्स के लिए अनुशंसित किया जा सकता है या नहीं, –
यह थोड़ी देर हो गया है, लेकिन मुझे कल्पना है कि यह अभी भी एक नई कक्षा को संकलित कर रहा है। यदि ऐसा है, तो प्रभाव 'parseClass' के समान होगा – clmarquart