2011-01-14 19 views
6

He intentado buscar publicaciones que puedan ayudarme, no puedo encontrar ninguna.java.lang.NoClassDefFoundError cuando el archivo está allí

Estoy desplegando un oído en el servidor JBoss4, y empecé a tener este problema desde que agregué un nuevo proyecto.

este nuevo proyecto se define como proyecto de Java en eclipse, y el proyecto EAR tiene un proyecto EJB que tiene el nuevo proyecto Java como uno de los proyectos que depende de si se implementa en JBoss localmente a través de eclipse, no hay problema y todo funciona sin problemas

Pero cuando se implementó en JBoss en el entorno de prueba (fuera del eclipse), siguió obteniendo java.lang.NoClassDefFoundError en una de las clases definidas en el nuevo proyecto de Java.

Miré dentro del archivo EAR para acceder al contenedor (proyecto EJB), y luego dentro del contenedor, puedo ver la estructura del directorio y todos los archivos de clase del nuevo proyecto Java, es decir. La clase de la que se queja está ahí dentro del EAR-> JAR y coincide con la estructura exacta que está buscando.

Estoy perdido en lo que más puedo mirar.

¡Todos los indicadores son muy apreciados!

Gracias

+0

Probé todo y todavía me da la misma excepción –

+0

Olvidé responder a este hilo - como una actualización: descubrí cuál era el problema, lo que fue realmente tonto, en algún momento en el camino, cambié el nombre del paquete cambiando un personaje a mayúscula. p.ej.de packagename, a packageName - y en algún punto del camino, algunos archivos de clase todavía lo referencian por el nombre anterior (sin mayúscula) y por lo tanto el NoClassDefFoundError –

Respuesta

6

A menudo se produce este error si hay una falta de coincidencia en la forma en que se compilaron algunas de las clases. Por ejemplo, si compiló algunas de las clases en una versión posterior del JDK sin establecer el nivel de cumplimiento de java y lo está ejecutando con una versión anterior.

Mi sugerencia es comprobar el JDK está ejecutando JBoss con, a continuación, comprobar cómo se ha compilado sus clases

+0

Curiosamente, el problema fue porque estaba cambiando el nombre del paquete con algunos caracteres en mayúscula a no capitalizados o viceversa y arruina los archivos dentro del contenedor –

0

compruebe su archivo original. la estructura de esta manera?

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 

si no es así, debe volver a empaquetar el archivo de su oreja.

+0

Así es como es la estructura, aunque en el jar EJB, tengo persistence.xml en lugar de ejb-jar.xml –

0

Verificar propiedad "Ruta de clase:" en META-INF/MANIFEST.MF.

+0

el Class-Path está vacío –

+0

Trate de escribir el jar de dependencia, como "Class-Path: dependencyA.jar dependencyB.jar" –

1

Esto también podría ser debido a problemas de aislamiento cargador de clases si tiene varios archivos de guerra/oído

1

I Tuve un problema similar con JBoss 4: ClassNotFoundException y NoClassDefFoundError en el tiempo de ejecución incluso si el código se compilaba bien. Me llevó 4 horas descubrir la causa.

El BuildPath de mis proyectos estaba bien, el problema estaba realmente en el ClassPath de JBoss. Lo resolví haciendo: JBoss 4.2 RunTime Server> Abrir configuración de inicio> Editar configuración> ClassPath> agregar JAR y proyectos para vincular a JBoss con "Agregar JAR"/"Agregar proyectos".

Eclipse conocía las clases en los frascos y los proyectos relacionados gracias a la BuildPath, por lo que no hubo un error en el IDE, pero el servidor JBoss no sabía dónde encontrar estas clases ...

Cuestiones relacionadas