2009-09-09 25 views
61

जब मैं अपने प्रोजेक्ट को चलाने, मैं इस त्रुटि के कई आउटपुट मिलता है:,"NoClassDefFoundError: कक्षा प्रारंभ नहीं कर सका" त्रुटि

 
Sep 9, 2009 8:22:23 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet Jersey threw exception 
java.lang.NoClassDefFoundError: Could not initialize class SpringFactory 
     at com.point2.prospect.persistence.hibernate.HibernateTransactionInterceptor.doFilter(HibernateTrans 
actionInterceptor.java:17) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at com.point2.prospect.restapi.ServerErrorInterceptor.doFilter(ServerErrorInterceptor.java:27) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
     at java.lang.Thread.run(Thread.java:619) 

मैं इस समस्या को वेब पर कहा जा रहा है की एक पद्धति है कि नोटिस लेकिन कोई असली जवाब के साथ। इस तरह की त्रुटि के लिए एक सामान्य कारण क्या है?

उत्तर

6

आप आवश्यक कक्षा परिभाषा याद कर रहे हैं; आम तौर पर जरूरी जार के कारण क्लासपाथ में नहीं होता है।

J2SE API से:

public class NoClassDefFoundError extends LinkageError

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

+2

लापता वर्ग का वास्तविक नाम कहीं भी घोंसला वाले अपवाद संदेश में होना चाहिए। –

171

NoClassDefFound त्रुटि एक अस्पष्ट त्रुटि है और अक्सर एक और अधिक गंभीर मुद्दा छुपा रहा है। यह क्लास नॉटफाउंड अपवाद के समान है (जिसे तब फेंक दिया जाता है जब कक्षा केवल सादा नहीं होती है)।

NoClassDefFound मई से संकेत मिलता है वर्ग, वहाँ नहीं है के रूप में javadocs से संकेत मिलता है, लेकिन यह आम तौर पर जब, के बाद classloader वर्ग के लिए बाइट्स भरी हुई हैं और उन पर "defineClass" कहता है फेंक दिया है। अन्य सुरागों या संभावित "कारण" अपवादों के लिए भी अपना पूरा स्टैक ट्रेस सावधानी से जांचें (हालांकि आपका विशेष बैकट्रैक कोई भी नहीं दिखाता है)।

जब आप NoClassDefFoundError प्राप्त करते हैं तो यह देखने के लिए पहली जगह है कि कक्षा की परिभाषा के दौरान होने वाली कोई भी प्रारंभिकता आपके वर्ग की स्थिर बिट्स में है। यदि यह विफल हो जाता है तो यह NoClassDefFoundError फेंक देगा - यह एक अपवाद इंटिलाइज़रइज़र फेंकना है और समस्या का विवरण इंगित करना है, लेकिन मेरे अनुभव में, ये दुर्लभ हैं। यह केवल ExceptionInInitializer करेगा, पहली बार कक्षा को परिभाषित करने का प्रयास करता है, उसके बाद यह केवल NoClassDefFound को फेंक देगा। तो पहले लॉग देखें।

इस प्रकार मैं उस हाइबरनेट ट्रान्सएक्शन इंटरसेप्टर लाइन में कोड को देखने और यह देखने की आवश्यकता के बारे में सुझाव देना चाहूंगा। ऐसा लगता है कि यह वर्ग SpringFactory कक्षा को परिभाषित करने में असमर्थ है। तो शायद उस कक्षा में प्रारंभिक कोड की जांच करें, जो मदद कर सकता है। यदि आप इसे डीबग कर सकते हैं, तो इसे ऊपर की अंतिम पंक्ति (17) पर रोकें और डीबग करें ताकि आप अपवाद उत्पन्न करने वाली सटीक रेखा को खोजने का प्रयास कर सकें। लॉग इन में भी उच्च जांच करें, यदि आप बहुत भाग्यशाली हैं तो ExceptionInInitializerError हो सकता है।

+20

धन्यवाद। स्थिर प्रारंभिक ब्लॉक पर मेरा ध्यान बदलना उत्तेजना के घंटे बचाए। –

+1

"यानी कक्षा की परिभाषा के दौरान होने वाली कोई भी अंतर्निहितता" - धन्यवाद! –

+2

एक और अच्छा विचार है, अपने लॉग को फ़ाइल में पाइप करना और java.lang.ClassNotFoundException की तलाश करना है। वहां उन लोगों में से एक भयानक हो सकता है, जो आपको बताएगा कि वह कौन सा वर्ग लोड करने की कोशिश कर रहा था जो सभी NoClassDefFoundError अपवादों का उत्पादन करता था। मेरे लिए काम किया –

0

मुझे एक ही समस्या का सामना करना पड़ा था, क्योंकि जार लाइब्रेरी की अन्य लिनक्स उपयोगकर्ता (रूट) द्वारा प्रतिलिपि बनाई गई थी, और लॉग इन उपयोगकर्ता (प्रक्रिया) में जार फ़ाइल सामग्री को पढ़ने के लिए पर्याप्त विशेषाधिकार नहीं था।

0

महसूस किया कि जब मैंने यह त्रुटि देखी तो मैं OpenJDK का उपयोग कर रहा था। एक बार मैंने ओरेकल जेडीके को स्थापित करने के बाद इसे ठीक कर दिया।

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