2010-05-26 4 views
29

मेरा प्रोजेक्ट पी निर्भरता पर निर्भर करता है जो निर्भरता बी पर निर्भर करता है। मेरी प्रोजेक्ट की pom.xml फ़ाइल में ए निर्भरता के रूप में शामिल है, और इसका जार पी के क्लासपाथ में शामिल है। हालांकि, पी 0 के रनटाइम पर NoClassDefFoundError फेंक दिया गया है, जो लापता बी जार से निकलता है।मेवेन। ट्रांजिटिव निर्भरता

क्या मैवेन ने इन निर्भरताओं को स्वचालित रूप से डाउनलोड नहीं किया है?

उत्तर

20

मेरा प्रोजेक्ट पी निर्भरता ए पर निर्भर करता है [एक संकलन गुंजाइश के साथ] जो निर्भरता बी [संकलन के दायरे के साथ] पर निर्भर करता है।

जब तक बी ए के एक optional dependency है, बी एक "संकलन (*)" गुंजाइश के साथ पी पर निर्भरता के लिए चाहिए (Dependency Scope की तालिका देखें और टिप्पणी पढ़ने के लिए) और इस तरह रनटाइम पर उपलब्ध होना चाहिए।

हालांकि, पी के रनटाइम पर फेंक दिया गया नोक्लास डीफफाउंड एरर है, जो लापता बी जार से निकलता है।

चूंकि आप ग्रहण के तहत प्रोजेक्ट चला रहे हैं, इसलिए कक्षा पथ आपके लिए सेटअप है इसलिए मैं इस स्तर पर एक गलती को बाहर कर दूंगा। यह हमें वैकल्पिक निर्भरता के मामले के साथ छोड़ देता है।

पीएस: इस तरह की समस्या की जांच करने के लिए एक बहुत ही उपयोगी टूल dependency:tree है।

+1

अंतिम वाक्य फिर से करें: m2eclipse में निर्भरता पदानुक्रम दृश्य निर्भरता से बहुत अधिक उपयोगकर्ता के अनुकूल है: पेड़, यह आपको 'बहिष्कृत' विज़ार्ड भी देता है –

+0

@seanizer: True (मानते हुए कि ओपी m2eclipse का उपयोग कर रहा है)। ध्यान दें कि ['निर्भरता: पेड़'] (http://maven.apache.org/plugins/maven- निर्भरता- प्लग) भी [फ़िल्टरिंग] का समर्थन करता है (http://maven.apache.org/plugins/maven- निर्भरता- प्लगइन/उदाहरण/छानने-निर्भरता-tree.html)। –

+0

मुझे लगता है कि कोई भी जो मैवेन और ग्रहण का उपयोग करता है, वह भी m2eclipse का उपयोग करता है, क्योंकि यह मैवेन-ग्रहण-प्लगइन (पोम संपादक, रिपोजिटरी इंडेक्स, स्वचालित कॉन्फ़िगरेशन परिवर्तनों को स्वचालित रूप से संपादित किया जाता है) के मुकाबले ज्यादा शक्तिशाली और आरामदायक है। और निश्चित रूप से इसमें फ़िल्टरिंग भी शामिल है: पदानुक्रम में किसी भी आर्टिफैक्ट पर क्लिक करें और केवल इस आर्टिफैक्ट के पदानुक्रम को दिखाया गया है ... –

2

यदि यह निर्भरता ए संकलित गुंजाइश है - निश्चित रूप से, इसे डाउनलोड किया जाना चाहिए और परियोजना के कक्षा में उपलब्ध अधिक से अधिक उपलब्ध होना चाहिए था। लेकिन अगर प्रदान किया गया था तो यह मामला होगा, क्योंकि प्रदान किए गए डेप को मैवेन द्वारा आवेदन के साथ पैक नहीं किया जाएगा।

बीटीडब्ल्यू आप इस परियोजना को कैसे चला रहे हैं - उचित तरीके से नहीं चलने से ऐसी समस्याएं भी हो सकती हैं और यह एक बहुत अच्छा अनुमान है। उदाहरण के लिए - यदि आप मेवेन exec plugin का उपयोग कर रहे हैं - मैवेन आपके लिए क्लासपाथ ठीक से सेटअप करेगा, लेकिन अन्यथा - आपको इसे स्वयं सेट करना चाहिए (या assembly plugin के साथ निर्भरता वाले जार का निर्माण करना चाहिए)।

+0

ए 'संकलन "गुंजाइश के साथ एक निर्भरता के रूप में सूचीबद्ध करता है बी; पी सूची को "संकलन" स्कोप के साथ निर्भरता के रूप में सूचीबद्ध करता है। बी को पी के क्लासपाथ में जोड़ा नहीं जा रहा है। – Jake

+0

आपने 'आप इसे कैसे चला रहे हैं' के सवाल का जवाब नहीं दिया? – bmargulies

+0

@bmargulies क्षमा। मैं एक्लिप्स मेटाडेटा उत्पन्न करता हूं और इसे ग्रहण डीबगर से बाहर चलाता हूं। – Jake

-2

मेरे मामले में मैं -vm पैरामीटर के साथ ग्रहण शुरू करना भूल गया, जो jdk/javaw.exe को इंगित करना चाहिए।

के बाद भी जावा ईई के 5 साल तुम अब भी नौसिखिए गलती करते हैं प्रोग्रामिंग ...