2011-03-31 25 views
5

मेरी समस्या यह है कि मेरे पास वेब अनुप्रयोग है जिसे JBoss 6 में WAR फ़ाइल के रूप में बनाया गया है और तैनात किया गया है। मेरा सर्वलेट मेरे ऐप में एक वर्ग लोड करने में विफल रहता है और फेंकता है कक्षा डेफ में कोई त्रुटि नहीं मिली।NoClassDefFoundError जब कक्षा JBoss 6 WAR WEB-INF/वर्ग फ़ोल्डर

मैंने पुष्टि की कि यह वर्ग WAR फ़ाइल के सही स्थान पर मौजूद है। मेरे सभी आवेदन वर्ग वेब-आईएनएफ/कक्षा फ़ोल्डर में मौजूद हैं, साथ ही मेरे सर्वलेट वर्ग के साथ जो बिना किसी झुकाव के निष्पादित करता है। वास्तव में, ऐसा लगता है कि यह सिर्फ एक वर्ग है जो कक्षापथ पर नहीं है क्योंकि आवेदन के अन्य पहलू महान चलते हैं।

जेबीएस जेडीके 1.6_21 पर चल रहा है, ऐप जेडीके 1.6_24 के साथ बनाया गया था, यह कोई मुद्दा सही नहीं होना चाहिए?

आगे यह ऐप एक्लिप्स के भीतर स्थानीय रूप से ठीक से चलता है, और जब मैं एक अलग फ़ाइल टॉमकैट 7 और ग्लासफ़िश 3 सर्वर पर WAR फ़ाइल को तैनात करता हूं तो वे दोनों बिना किसी समस्या के इस कक्षा को पाते हैं।

मुझे उम्मीद नहीं है कि किसी को भी तुरंत यह पता चल जाए कि क्या गलत है, अगर किसी ने ऐसा कुछ देखा है तो कृपया अपने अनुभव साझा करें, या यदि आपके पास अच्छी टिप्स हैं या वास्तव में क्लासपाथ मुद्दों में गहरी हो रही है तो अच्छे टूल के बारे में जानें कृपया बाँटें।

+0

किस वर्ग की शिकायत कर रहा है? संभावना से अधिक, जेबॉस पहले से ही इस कक्षा को अपने सिस्टम/साझा जार में प्रदान करता है और यह आपके युद्ध में कक्षा के साथ टकरा रहा है। मेरे पास कोई समाधान नहीं है, केवल मेरी सहानुभूति वर्ग लोडिंग को हल करने और जेबॉस के साथ अलगाव मुद्दों को मजेदार या आसान नहीं है। –

+0

यह मेरी कक्षा है। जेबॉस पहले से ही इसे तब तक पैक नहीं कर पाएगा जब तक कि वे मेरे कार्यालय में फंस गए और कॉफी पकड़ने के दौरान इसे चुरा लिया :) –

उत्तर

7

NoClassDefFoundError का अर्थ है कि कक्षा "लोड" थी लेकिन कक्षा परिभाषा को नहीं बनाया जा सका। यह आमतौर पर तब होता है जब कक्षा के स्थिर प्रारंभ में अपवाद होता है। मैंने ऐपसेवर में एक से अधिक बार देखा है कि स्थिर प्रारंभिकरण के दौरान अपवाद लॉग फ़ाइल में रिपोर्ट नहीं किया गया है।

स्थिर ब्लॉक और अपवादों के संभावित कारणों में विफल होने वाली कक्षा के स्थिर गुणों की प्रारंभिकता की जांच करें।

जेबॉस और वेबस्पेयर में मैंने देखा है कि एक अन्य कारण यह है कि वेब एप्लिकेशन कुछ लाइब्रेरी वितरित कर रहा है जो ऐप सर्वर (जैसे servlet.jar या कुछ) में लाइब्रेरी के साथ संघर्ष करता है। आम तौर पर समस्या को अपमानजनक लाइब्रेरी को हटाकर या "पैरेंट फर्स्ट" में क्लासलोडिंग तंत्र को ट्वीव करके हल किया जाता है।

उम्मीद है कि यह

+0

आपने मुझे कुछ चीजों के बारे में सोचने के लिए दिया है। अच्छी टिप्स! मैं जांच करूँगा और आपको बता दूंगा कि क्या यह मेरी समस्या हल करता है। –

+0

बहुत बढ़िया! आप स्थैतिक प्रारंभकर्ताओं की जांच करने के बारे में सही थे, वहां एक संपत्ति फ़ाइल थी जिसे गलत तरीके से संदर्भित किया जा रहा था और एक एनपीई फेंक दिया जा रहा था। मैंने कभी सोचा नहीं होगा कि जेबॉस कक्षाओं के स्थैतिक प्रारंभ के दौरान होने वाले अपवादों को भ्रामक रूप से लॉग नहीं करेगा। –

+0

धन्यवाद! मैंने सोचा कि NoClassDefFoundError का मतलब था कि कक्षा लोड नहीं हुई थी। यह एक आंख खोलने वाला है। – anton1980