2011-02-03 5 views
6

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

<g:link rel="stylesheet" url="${resource(dir:'css', file:'mycss.css', 
plugin:'myplugin')}"/> 

इस विचार प्लगइन्स की अवधारणा का उल्लंघन करता है, जहां उसके कुछ निश्चित पहलुओं होना चाहिए खुलासा, और बाकी एक काला बॉक्स है? संबंधित Grails परियोजनाओं के बीच स्थिर संसाधनों को साझा करने के लिए वैकल्पिक दृष्टिकोण भी स्वागत है, अगर मैं एक पागल, गलत सिर का नेतृत्व कर रहा हूं तो कोशिश कर रहा हूं। :)

उत्तर

3

सबसे पहले, Grails में, एक प्लगइन को एक काला बॉक्स नहीं माना जाता है। इसके विपरीत, सभी कोड उजागर किया गया है; यदि आप वास्तव में इसे एक ब्लैक बॉक्स बनाना चाहते हैं, तो आपको एक और प्लगइन, Binary Artifacts का उपयोग करना चाहिए।

दूसरा, आपका दृष्टिकोण बहुत समझदार है।

def res = { attrs -> 
    attrs.dir=pluginContextPath 
    //Do whatever you want here 
    out << g.resource(attrs) 
} 

और यह <g:resource> के रूप में एक ही तरह से कहते हैं: प्लगइन संसाधनों का उपयोग करने के लिए, मैं की तरह एक taglib बनाया होगा। इस तरह, आपको अपने प्लगइन के संसाधन पथ का खुलासा भी नहीं करना पड़ता है। Nimble plugin इस दृष्टिकोण का उपयोग कर रहा है।

इसके अलावा आप Grails Resources plugin पर एक नज़र डाल सकते हैं, जो Grails प्लगइन और परियोजनाओं के बीच स्थिर संसाधन निर्भरताओं के दुःस्वप्न को संभालने की कोशिश कर रहा है। मैंने कभी इसका इस्तेमाल नहीं किया है, लेकिन निश्चित रूप से मेरे अगले Grails प्रोजेक्ट में, मैं इसे एकीकृत कर दूंगा (बीटीडब्ल्यू, इसे Grails 1.4 में शामिल किया जाएगा)।

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