2009-09-09 26 views
61

Cuando ejecuto mi proyecto, consigo numerosas salidas de este error:"NoClassDefFoundError: No se pudo inicializar la clase" error

 
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) 

que notar que este problema tiene un patrón de ser pedido por toda la web, pero sin respuestas reales ¿Cuál es una causa general para este tipo de error?

Respuesta

6

Falta la definición de clase necesaria; típicamente causado por JAR requerido que no está en classpath.

De 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

El nombre real de la clase que falta debe estar en algún lugar en un mensaje de excepción anidado. –

171

de error es un error de noClassDefFound nebulosa y con frecuencia se esconde un problema más grave. Es no lo mismo que ClassNotFoundException (que se produce cuando la clase simplemente no está allí).

noClassDefFound puede indicar la clase no está ahí, como los javadocs indican, pero por lo general se inicia cuando, después de que el cargador de clases ha cargado los bytes para la clase y pide "defineClass" en ellos. También revise cuidadosamente su rastro completo de la pila en busca de otras pistas o posibles excepciones de "causa" (aunque su trayectoria inversa particular no muestra ninguna).

El primer lugar para buscar cuando obtiene un NoClassDefFoundError es en los bits estáticos de su clase, es decir, cualquier inicialización que tenga lugar durante la definición de la clase. Si esto no funciona lanzará un NoClassDefFoundError - se supone que lanzará un ExceptionInInitializerError e indicará los detalles del problema, pero en mi experiencia, estos son raros. Solo hará el ExceptionInInitializerError la primera vez que intente definir la clase, después de eso lanzará NoClassDefFound. Así que mira los registros anteriores.

Sugiero, por lo tanto, mirar el código en esa línea HibernateTransactionInterceptor y ver lo que se requiere. Parece que no puede definir la clase SpringFactory. Así que tal vez verifique el código de inicialización en esa clase, eso podría ayudar. Si puede depurarlo, deténgalo en la última línea anterior (17) y depúrelo para poder buscar la línea exacta que está causando la excepción. También consulte más arriba en el registro, si tiene mucha suerte podría haber un ExceptionInInitializerError.

+20

Gracias. Dirigir mi atención al inicializador estático bloquea las horas ahorradas de agravamiento. –

+1

"es decir, cualquier iniciación que tenga lugar durante la definición de la clase" - ¡Gracias! –

+2

Otra buena idea es conectar el registro a un archivo y buscar java.lang.ClassNotFoundException. Puede haber uno extraviado, que le dirá qué clase estaba intentando cargar y produjo todas las excepciones NoClassDefFoundError. Trabajó para mi. –

0

Tuve el mismo problema, porque la biblioteca de jar fue copiada por otro usuario de Linux (raíz) y el usuario (proceso) que inició sesión no tuvo suficiente privilegio para leer el contenido del archivo jar.

0

Me di cuenta de que estaba usando OpenJDK cuando vi este error. Se solucionó una vez que instalé Oracle JDK en su lugar.

Cuestiones relacionadas