2011-04-13 7 views
10

मेरे पास एक मेवेन प्रोजेक्ट है जिसे jar के रूप में पैक किया गया है।एक मैवेन की जार परियोजना में टीएलडी और टैग लिब फ़ाइलों को कैसे जोड़ें

और मेरे पास एक मेवेन प्रोजेक्ट भी है जिसे war के रूप में पैक किया गया है। इस युद्ध प्रोजेक्ट में एक tld फ़ाइल है और कुछ xhtml फ़ाइलें (टैग libs) है। युद्ध परियोजना की संरचना (मूल रूप से) है:

pom.xml 
src 
    main 
     java 
      ... 
     webapp 
      WEB-INF 
       my-facelets.taglib.xml 
       facelets 
        aTag.xhtml 
        anotherTag.xhtml 
      META-INF 
       my-facelets.taglib.tld 

और फिर एक आवश्यकता दिखाई दिया युद्ध परियोजना से उन एक्सएमएल, एक्सएचटीएमएल और टीएलडी फ़ाइलों को हटा दें और उन्हें जार परियोजना में पैकेज। तो मेरी पहली कोशिश जार परियोजना की पोम में जोड़ने था:

<resources> 
    <resource> 
    <directory>src/main/tld</directory> 
    <targetPath>META-INF</targetPath> 
    </resource> 

    <resource> 
    <directory>src/main/taglib</directory> 
    <targetPath>WEB-INF</targetPath> 
    </resource> 
</resources> 

और फ़ाइलों, निश्चित रूप से (मेरे द्वारा META-INF में निर्यात करना चाहता था) (लोगों और src/main/taglib शब्दों में कहें, src/main/tld में मैं WEB-INF में निर्यात करना चाहता था)। और जार बनाया गया था मैं चाहता हूँ के रूप में:

myjar 
    com 
     my 
      classes 
    WEB-INF 

    META-INF 
     my-facelets.taglib.tld 
    WEB-INF 
     ... 

और फिर मैं अपनी पहली युद्ध परियोजना के लिए इस नए जार कहा, एक Maven निर्भरता के रूप में।

समस्या यह है कि उन .tld, .xhtml, .xml फ़ाइलें जो जार के मेटा-आईएनएफ के अंदर हैं, वेब-आईएनएफ (जार युद्ध के WEB-INF/lib के अंदर है) मान्यता प्राप्त नहीं है। स्पष्ट रूप से वे सीधे युद्ध संरचना में होना चाहिए, जब तक कि कुछ अन्य विन्यास नहीं किया जाता है। यह एक जरूरी आवश्यकता है, क्योंकि कई युद्ध परियोजनाएं जार परियोजना की विशेषताओं (कक्षाओं और टैगलिब्स) का उपयोग करती हैं।

+0

यह अगर तुम जार में इन फ़ाइलों डाल काम करता है, लेकिन WEB- अंदर नहीं आईएनएफ या मेटा-आईएनएफ फ़ोल्डर्स? – Raghuram

+0

संख्या। विलोम। – bluefoot

उत्तर

10

आजकल अभ्यास टीएलडी फाइलों को टैग लाइब्रेरी जेएआर में रखना है और क्लास लोडर को उन्हें ढूंढने देना है। अपाचे जेएसटीएल जार डाउनलोड करें और देखें कि वे इसे कैसे करते हैं। मैं उस सम्मेलन का पालन करने की सिफारिश करता हूं। यह आपके ऐप को भी सरल बना देगा, क्योंकि आपको अपनी वेब.एक्सएमएल फ़ाइल में टीएलडी घोषित नहीं करना होगा: बस अपने क्लासस्पैट में जेएआर डालें और सुनिश्चित करें कि आपके .jsp में यूआरआई टीएलडी में मेल खाता है।

+0

मैं कुछ डाउनलोड करने के बारे में भी सोच रहा था कि वे क्या करते हैं। मैं इसे देख लूंगा और परिणाम पोस्ट करूंगा। – bluefoot

+1

यह सही ढंग से काम करता है। प्रकटताओं में कुछ भी घोषित करने की आवश्यकता नहीं है। जार के 'मेटा-आईएनएफ' के अंदर बस सभी फाइलें डालें और मेवेन को युद्ध का निर्माण करें (इसके अंदर जार के साथ 'वेब-आईएनएफ/lib') चाल चल रही है। त्रुटि मेरे दूसरे '' तत्व की '' थी। – bluefoot

5

@duffymo - आपका समाधान पूरी तरह से काम करता है। अपने विवरण में ग्राफिक जोड़ना।

एक मेवेन प्रोजेक्ट बनाएं जो जेएआर उत्पन्न करता है। अपने customTags.tld फ़ाइल करने के लिए नीचे दिए गए

src -- main 
      |-- java 
      |  `-- net 
      |   `-- madhur 
      |     `-- helloTag.java 
      `-- resources 
        `-- META-INF 
         `-- tags 
          `-- customTags.tld 

इस तरह संरचना रखने आप में इस

<uri>http://www.xyzabc.com/taglibs/customTags</uri> 

तक पहुँचना टैग की तरह uri कुछ जोड़ने के युद्ध फ़ाइल

युद्ध संरचना

META-INF/ 
    META-INF/MANIFEST.MF 
    WEB-INF/ 
    WEB-INF/classes/ 
    WEB-INF/lib/ 
    WEB-INF/lib/{tagLibrary}.jar 
    WEB-INF/web.xml 
    WEB-INF/customTags.tld 
निम्नलिखित होना चाहिए

web.xml

<jsp-config> 
     <taglib> 
      <taglib-uri>www.xyzabc.com/taglibs/customTags</taglib-uri> 
      <taglib-location>/WEB-INF/customTags.tld</taglib-location> 
     </taglib> 
    </jsp-config> 

FTL या JSP फ़ाइल में टैग का उपयोग करना

FTL:

<#assign ct = JspTaglibs["www.xyzabc.com/taglibs/customTags"]> 
संबंधित मुद्दे