2011-01-14 16 views
6

मैंने पोस्टिंग के लिए चारों ओर देखने की कोशिश की है जो मेरी मदद कर सकती है, कोई भी नहीं ढूंढ सकती।java.lang.NoClassDefFoundError जब फ़ाइल वहां है

मैं जेबॉस 4 सर्वर पर एक कान तैनात कर रहा हूं, और मैंने यह समस्या शुरू कर दी क्योंकि मैंने एक नई परियोजना को जोड़ा।

इस नई परियोजना को ग्रहण में जावा प्रोजेक्ट के रूप में परिभाषित किया गया है, और ईएआर प्रोजेक्ट में एक ईजेबी प्रोजेक्ट है जिसमें नई जावा परियोजना परियोजनाओं में से एक के रूप में निर्भर है - यदि ग्रहण के माध्यम से स्थानीय रूप से जेबॉस पर तैनात किया गया है, तो कोई समस्या नहीं है और सबकुछ सुचारू रूप से

लेकिन जब परीक्षण पर्यावरण (जे ग्रहण के बाहर) में जेबॉस पर तैनात किया जा रहा है, तो जावा जावा.ंगैंग क्लास डीफफाउंड एरर को नए जावा प्रोजेक्ट में परिभाषित कक्षाओं में से एक पर रखा गया।

मैंने जार (ईजेबी प्रोजेक्ट) तक पहुंचने के लिए ईएआर फ़ाइल के अंदर देखा, और फिर जार के अंदर, मैं निर्देशिका संरचना और नई जावा परियोजनाओं से सभी वर्ग फ़ाइलों को देख सकता हूं - यानी। वह कक्षा जिसकी शिकायत है वह ईएआर-> जेएआर के अंदर है और सटीक संरचना से मेल खाती है जो वह ढूंढ रही है।

मैं खो गया हूं और मैं क्या देख सकता हूं।

किसी भी पॉइंटर्स की बहुत सराहना की जाती है!

धन्यवाद

+0

मैंने कोशिश की सबकुछ और यह अभी भी मुझे एक ही अपवाद दे रहा है –

+0

मैं इस धागे का जवाब देना भूल गया - एक अपडेट के रूप में: मुझे पता चला कि समस्या क्या थी, जो वास्तव में मूर्ख था, जिस तरह से कुछ बिंदु पर, मैंने पैकेज बदलकर नाम बदल दिया पूंजीकृत चरित्र। जैसे।पैकेजगेम से, पैकेजनाम तक - और कहीं भी, कुछ वर्ग फाइलें अभी भी पुराने नाम (गैर पूंजीकृत) द्वारा संदर्भित करती हैं और इसलिए नोक्लास डीफफाउंड एरर –

उत्तर

6

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

मेरे सुझाव JDK आप के साथ JBoss चल रहे हैं जाँच करने के लिए है, तो जाँच कैसे आप अपनी कक्षाओं

+0

मजेदार, समस्या इसलिए थी क्योंकि मैं कुछ के साथ पैकेज नाम बदल रहा था गैर-पूंजीकृत या इसके विपरीत पूंजीकृत वर्ण और यह जार के अंदर फ़ाइलों को खराब करता है –

0

जाँच उर कान फ़ाइल। इस तरह की संरचना?

myapp.ear 
|+ META-INF 
    |+ applications.xml and jboss-app.xml 
|+ myapp.war 
    |+ web pages and JSP /JSF pages 
    |+ WEB-INF 
     |+ web.xml, jboss-web.xml, faces-config.xml etc. 
     |+ lib 
     |+ tag library JARs 
     |+ classes 
     |+ servlets and other classes used by web pages 
|+ myapp.jar 
    |+ EJB3 bean classes 
    |+ META-INF 
     |+ ejb-jar.xml and persistence.xml 
|+ lib 
    |+ Library JARs for the EAR 

यदि नहीं, तो यू उर कान फ़ाइल repackage चाहिए।

+0

यह बहुत सुंदर है कि संरचना कैसे है, हालांकि ईजेबी जार में, मेरे पास persistence.xml है ejb-jar.xml –

0

संपत्ति की जांच करें "कक्षा-पथ:" META-INF/MANIFEST.MF में।

+0

के बजाय कक्षा-पथ खाली है –

+0

निर्भरता जार लिखने का प्रयास करें, जैसे "कक्षा-पथ: निर्भरताए.जर निर्भरता बी.जर" –

1

संकलित आप एक से अधिक युद्ध/कान फ़ाइलें अगर

1

मैं यह भी classloader अलगाव के मुद्दों के कारण हो सकता है कोड की तरह संकलित होने पर भी जेबॉस 4: क्लास नॉटफाउंड अपवाद और नोक्लास डीफफाउंड एरर रनटाइम पर एक समस्या थी। कारण जानने के लिए मुझे 4 घंटे लग गए।

मेरी परियोजनाओं का बिल्डपैथ ठीक था, समस्या वास्तव में जेबॉस के क्लासपाथ में थी। मैंने इसे हल करके हल किया: जेबॉस 4.2 रनटाइम सर्वर> ओपन लॉन्च कॉन्फ़िगरेशन> कॉन्फ़िगरेशन> क्लासपाथ> जेएआरएस को जोड़ने के लिए जेएआरएस और परियोजनाओं को जोड़कर "जेएआरएस जोड़ें"/"प्रोजेक्ट जोड़ें" के साथ जोड़ना।

ग्रहण जार में वर्गों और BuildPath से संबंधित परियोजनाओं धन्यवाद जानता था, इसलिए आईडीई में कोई त्रुटि थी, लेकिन JBoss सर्वर पता नहीं था जहां इन कक्षाओं को खोजने के लिए ...

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