wake-up-neo.com

"NoClassDefFoundError: Klasse konnte nicht initialisiert werden" Fehler

Wenn ich mein Projekt starte, erhalte ich zahlreiche Ausgaben dieses Fehlers:

 9. September 2009 8:22:23 AM org.Apache.catalina.core.StandardWrapperValve-Aufruf 
 SEVERE: Servlet.service () für Servlet-Jersey hat die Ausnahme 
 Java.lang.NoClassDefFoundError: Konnte nicht initialisiert werden Klasse 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) 
 unter 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) 
 bei 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) 
 bei Java.lang.Thread.run (Thread.Java:619) 

Ich stelle fest, dass dieses Problem im ganzen Web nachgefragt wird, aber keine echten Antworten bietet. Was ist eine allgemeine Ursache für diese Art von Fehler?

67
bm

Der NoClassDefFound-Fehler ist ein nebulöser Fehler und birgt häufig ein schwerwiegenderes Problem. Es ist nicht dasselbe wie ClassNotFoundException (die ausgelöst wird, wenn die Klasse einfach nicht da ist).

NoClassDefFound may gibt an, dass die Klasse nicht vorhanden ist, wie in den Javadocs angegeben. Sie wird jedoch normalerweise ausgelöst, wenn der Classloader die Bytes für die Klasse geladen hat und "defineClass" aufruft. Überprüfen Sie außerdem sorgfältig Ihre vollständige Stapelverfolgung auf andere Hinweise oder mögliche "Ursache" -Ausnahmen (obwohl in Ihrem speziellen Backtrace keine angezeigt wird).

Die erste Stelle, an der Sie nach einem NoClassDefFoundError suchen, ist das statische Bit Ihrer Klasse, d. H. Jede Initialisierung, die während der Definition der Klasse stattfindet. Wenn dies fehlschlägt, wird ein NoClassDefFoundError ausgelöst - es soll einen ExceptionInInitializerError werfen und die Details des Problems angeben, aber meiner Erfahrung nach sind diese selten. ExceptionInInitializerError wird nur beim ersten Versuch, die Klasse zu definieren, ausgeführt. Danach wird NoClassDefFound ausgelöst. Schauen Sie sich also frühere Protokolle an.

Ich würde daher vorschlagen, sich den Code in dieser HibernateTransactionInterceptor-Zeile anzusehen und zu sehen, was er benötigt. Es scheint, dass es nicht möglich ist, die Klasse SpringFactory zu definieren. Also vielleicht den Initialisierungscode in dieser Klasse überprüfen, das könnte helfen. Wenn Sie es debuggen können, halten Sie es in der letzten Zeile (17) an und debuggen Sie hinein, um die genaue Zeile zu finden, die die Ausnahme verursacht. Prüfen Sie auch weiter oben im Protokoll. Wenn Sie Glück haben, liegt möglicherweise ein ExceptionInInitializerError vor.

182
Michael Wiles

Ihnen fehlt die notwendige Klassendefinition. In der Regel wird dies dadurch verursacht, dass sich die erforderliche JAR nicht im Klassenpfad befindet.

Von J2SE API :

öffentliche Klasse NoClassDefFoundError erweitert LinkageError

Wird ausgelöst, wenn die Java Virtual Machine oder Eine ClassLoader-Instanz versucht, .__ zu laden. in der Definition einer Klasse (als Teil .__ eines normalen Methodenaufrufs oder als Teil von Erstellen einer neuen Instanz mit dem neuen Ausdruck) und keine Definition des Klasse konnte gefunden werden.

Die gesuchte Klassendefinition existierte, als der aktuell ausgeführte Klasse wurde kompiliert, aber die Definition kann nicht mehr gefunden werden.

6
ChssPly76

Ich war mit demselben Problem konfrontiert, weil die JAR-Bibliothek von einem anderen Linux-Benutzer (root) kopiert wurde und der angemeldete Benutzer (Prozess) nicht über die erforderlichen Berechtigungen zum Lesen des JAR-Dateiinhalts verfügt.

0
Kayvan Tehrani

Ich hatte folgendes:

 class Util {
  static boolean isNeverAsync = System.getenv().get("asyncc_exclude_redundancy").equals("yes");
}

sie können das Problem wahrscheinlich sehen, die Env-Variable gibt möglicherweise Null statt String zurück. __ Um meine Theorie zu testen, habe ich sie geändert:

 class Util {
  static boolean isNeverAsync = false;
}

und das Problem ging weg. Schade, dass Java Ihnen nicht die genaue Stack-Spur des Fehlers geben kann, irgendwie komisch.

0
MrCholo