2013-02-07 18 views
13

मैं अपने आवेदनलोड हो रहा है freemarker टेम्पलेट्स .jar

में freemarker टेम्पलेट का उपयोग कर रहा हूँ अंदर फ़ोल्डर एक जार फ़ाइल के लिए अपने आवेदन की तैनाती से पहले, सभी मैं क्रम में करने के लिए मेरे टेम्पलेट लोड करने के लिए की जरूरत है यह था: cfg.setDirectoryForTemplateLoading(new File("templates"));

जिसने मेरे प्रोजेक्ट के अंदर बनाए गए टेम्पलेट फ़ोल्डर से सभी टेम्पलेट लोड किए।

अब, मैवेन में जाने और मेरे आवेदन को निष्पादन योग्य जार में तैनात करने के बाद। एप्लिकेशन अब इस फ़ोल्डर को नहीं ढूंढ सकता है (मैंने .jar फ़ाइल के अंदर चेक किया है और "टेम्पलेट्स" फ़ोल्डर रूट निर्देशिका में सीधे तैनात किया गया है)

मैंने जो कुछ भी मुझे पता है, मैंने कोशिश की है। लेकिन कोई भाग्य के साथ।

अब मुझे अपने सभी टेम्पलेट्स को कैसे लोड करना है? (मुझे लगता है कि अगर मैं .jar फ़ाइल के बाहर फ़ोल्डर डालता हूं लेकिन उसी निर्देशिका में यह काम करेगा। लेकिन यह वही नहीं है जो मैं चाहता हूं।)

धन्यवाद।

उत्तर

23

void setClassForTemplateLoading(Class cl, String prefix); 

पर एक नज़र ... FreeMarker manual chapter about template loading में है।

उदाहरण:

cfg.setClassForTemplateLoading(this.getClass(), "/templates"); 

... अपने टेम्पलेट वर्तमान वर्ग की जड़ तक templates पैकेज सापेक्ष में स्थित है, तो।

+0

मैं देखना FTL रिश्तेदार के लिए पथ की जरूरत होगी, वे वास्तव में यह वहाँ के बारे में है, लेकिन यह कैसे उपयोग करने के लिए का कोई वास्तविक उदाहरण के साथ बात करते हैं। क्या आप कृपया उदाहरण के साथ मेरी मदद कर सकते हैं – Gleeb

+0

मेरा अद्यतन उत्तर –

+0

देखें, मैं इसे देख लूंगा। धन्यवाद – Gleeb

0
Configuration cfg; 
private Template template; 
    { 
     cfg=new Configuration(); 
     try { 
      cfg.setClassForTemplateLoading(this.getClass(), "/templates"); 
      template = cfg.getTemplate("template.ftl"); 
} 

यह मेरे लिए पूरी तरह से काम करता है। यहां मेरे टेम्पलेट फ़ोल्डर में template.ftl है जो src/main/संसाधन पैकेज के अंतर्गत है।

0

उल्लेख

cfg.setClassForTemplateLoading(this.getClass(), "/templates"); 

के लिए एक वैकल्पिक

TemplateLoader ldr = new ClassTemplateLoader(classLoader, basePackagePath); 
cfg.setTemplateLoader(ldr); 

यदि आपने अपना FTL प्रोसेसर के अंतर्गत आता है के अलावा अन्य जार से सामान लोड करने के लिए की जरूरत है जो उपयोगी हो सकता है है। cfg.getTemplate(..) को

कॉल तो शायद और अधिक सुविधाजनक के रूप में वे केवल basePackagePath

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