2013-02-25 112 views
7

में संदर्भित किसी अन्य ग्रहण परियोजना निर्भरता में घटकों को खोजने में विफल रहता है। मैं दो ग्रहण परियोजनाओं (myclient & myservice) में एक जीडब्ल्यूटी वेब एप्लिकेशन विभाजित पर काम कर रहा हूं।वसंत संदर्भ: घटक-स्कैन पीओएम

माइक्लिएंट प्रोजेक्ट पीओएम में निर्भरता के माध्यम से myservice प्रोजेक्ट का संदर्भ देता है।

<dependency> 
<groupId>com.myproject</groupId> 
<artifactId>myservices</artifactId> 
<version>1.0.0</version> 
</dependency> 

Myclient प्रोजेक्ट में एक WAR निर्देशिका src/main/webapp है। Myclient प्रोजेक्ट के लिए आउटपुट फ़ोल्डर src/main/webapp/WEB-INF/कक्षाएं है।

myclient परियोजना निम्नलिखित

<context:component-scan base-package="com.myproject.myclient, com.myproject.myservices"/> 

के साथ एक स्प्रिंग वर्णनकर्ता आवेदन-context.xml और web.xml

<web-app> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/application-context.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
... 
</web-app> 

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

मेरा मानना ​​है कि आवेदन स्टार्टअप के दौरान निम्न लॉग प्रविष्टि समस्या

org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/myproject/myservices/**/*.class] to resources [] 

myclient परियोजना के लिए स्थान पैटर्न classpath पर सभी संसाधनों को हल करता है लेकिन myservices के लिए कोई संसाधन पाए जाते हैं के स्रोत इंगित करता है।

मैंने माइक्रोसिस प्रोजेक्ट जेएआर बनाने और इस जेएआर को myclient प्रोजेक्ट के src/main/webapp/WEB-INF/lib फ़ोल्डर में रखने के साथ प्रयोग किया। जब मैं ऐसा करता हूं तो घटक स्कैनिंग काम करता है। हालांकि विकास के लिए मैं हर बार जब मैं माइक्रोसिस परियोजना में बदलाव करता हूं तो एक जेएआर बनाना और कॉपी करना नहीं चाहता हूं। मुझे कल्पना है कि घटक स्कैनिंग को उस परियोजना के निर्माण के बिना पीओएम के माध्यम से संदर्भित एक परियोजना पर काम करना चाहिए, लेकिन बहुत प्रयोग करने के बाद मैं यह काम करने में असमर्थ रहा हूं।

+0

आप किस आईडीई का उपयोग कर रहे हैं? –

+0

@बिशकर ग्रहण हेलिओस – Josh

उत्तर

2

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

, अब जब आप अपने सर्वर Eclispe सर्वर एडाप्टर तंत्र प्रकाशित का उपयोग कर के लिए एक परियोजना को तैनात है, सब कुछ तैनात किया जाना चाहिए MyServices जार आपके myclient प्रोजेक्ट के लिए सही जगह पर रखा जाएगा।

लेकिन सुनिश्चित करें कि आप नवीनतम बनाम m2e-wtp के आयन स्थापित। इस प्रकार आपके pom.xml और परिनियोजन असेंबली में आपकी कॉन्फ़िगरेशन सही ढंग से कॉन्फ़िगर हो जाएगी।

+0

हाय गैमरसन, आपकी प्रतिक्रिया के लिए धन्यवाद। मेरे प्रोजेक्ट में "परिनियोजन असेंबली" विकल्प नहीं है। मुझे लगता है कि ऐसा इसलिए है क्योंकि यह एक जीडब्ल्यूटी परियोजना है। मैं maven m2e प्लगइन का उपयोग कर रहा हूं और नवीनतम संस्करण को अपडेट करने का प्रयास किया है, लेकिन इससे कोई फर्क नहीं पड़ता। एक जीडब्ल्यूटी ऐप चलाने से आपके द्वारा वर्णित ग्रहण सर्वर एडेप्टर प्रकाशन तंत्र के लिए थोड़ा अलग हो सकता है, क्योंकि जीडब्ल्यूटी प्लगइन एंबेडेड जेट्टी वेब सर्वर का उपयोग करके विकास मोड में ग्रहण से बाहर ऐप चलाता है। मैं m2e-wtp प्लगइन का उपयोग नहीं कर रहा हूं - क्या यह कुछ आवश्यक है? – Josh

+0

मैं आपकी माइक्लिएंट प्रोजेक्ट को "तैनाती असेंबली" प्राप्त करने के लिए देखता हूं, यह एक वेबटोल पहलू परियोजना होना चाहिए। आपके myclient प्रोजेक्ट के लिए आपका पोम पैकेज प्रकार क्या है? – gamerson

+0

पीओएम पैकेजिंग प्रकार युद्ध – Josh

1

इस प्रयास करें:

<context:component-scan base-package="com.myproject"/> 
2

2 अलग फ़ाइलों में अपने आवेदन-context.xml बंटवारे का प्रयास करें:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:service-context.xml,classpath:client-context.xml</param-value> 
</context-param> 

myservices/src/मुख्य/संसाधन/सेवा-प्रसंग।xml:

<context:component-scan base-package="com.myproject.myservices"/> 

myclient/src/मुख्य/संसाधन/क्लाइंट-context.xml:

<context:component-scan base-package="com.myproject.myclient"/> 
+0

मैंने यह कोशिश की है लेकिन यह अभी भी घटक स्कैन का उपयोग कर सेम को खोजने में असमर्थ था। यदि मैं वसंत एक्सएमएल में स्पष्ट रूप से सेम घोषित करता हूं तो यह उन्हें पाता है लेकिन घटक स्कैन का उपयोग नहीं करता है। फिर भी सुझाव के लिए धन्यवाद। – Josh

+0

क्या आपने अपनी परियोजना को बिल्ड पथ निर्भरता के रूप में जोड़ने का प्रयास किया है?(एक मेवेन निर्भरता नहीं; "पथ बनाएं" -> "परियोजनाएं" -> "जोड़ें") –

1

निम्नलिखित बातें की जांच करें देखने के लिए:

  1. क्या आपकी सेवा प्रोजेक्ट प्री है जार के रूप में "केवल" भेजा गया है या पूरी परियोजना वर्कस्पेस रिज़ॉल्यूशन के माध्यम से उपलब्ध है। इसे मैवेन-रेफरेंस-मेन्यू के माध्यम से चेक किया जा सकता है (वर्कस्पेस्रेसोल्यूशन को अक्षम/सक्षम करें)
  2. src/main/webapp के अंतर्गत वेबैप का लेआउट ठीक है। लेकिन क्या मैं आपको सही कहता हूं कि सभी वर्गों की प्रतिलिपि बनाई गई है? यदि ऐसा है, तो आपको यह सुनिश्चित करना चाहिए कि सबकुछ लक्ष्य निर्देशिका में है। तो जांच करें कि क्या एक Maven कॉल "स्वच्छ पैकेज" \ कि पैकेजिंग में $ अपने-webarchivename \ वेब-INF \ lib
    1. चेक लक्ष्य के तहत लक्ष्य फ़ोल्डर के तहत एक webappstructure और सभी आवश्यक libs (जैसे MyService) मौजूद उत्पन्न करता है MyService pom.xml जार पर सेट है (आप शायद इस, सही है?)
1

यह स्पष्ट है कि आपकी सेवा जार अपने ग्राहक परियोजना के निर्माण पथ में शामिल नहीं है। यह एकमात्र मूल कारण है।

सुनिश्चित करें कि 3 अंक:

  1. आप अपनी सेवा परियोजना जो सही pom.xml है के तहत स्थापित mvn स्वच्छ चल चुके हैं।
  2. आपने एमवीएन ग्रहण चलाया है: ग्रहण अपने क्लाइंट प्रोजेक्ट के तहत। यह आपकी सभी निर्भरता परियोजना को खींच देगा।
  3. अपने क्लाइंट ग्रहण परियोजना के निर्माण पथ संवाद की जांच करें। सूची में आपकी सेवा जार है? सुनिश्चित करें कि यह