2011-01-14 3 views
6

Ho provato a cercare post che potrebbero aiutarmi, non posso trovarne.java.lang.NoClassDefFoundError quando il file è presente

Sto installando un orecchio sul server JBoss4 e ho iniziato ad avere questo problema da quando ho aggiunto un nuovo progetto.

questo nuovo progetto è definito come progetto Java in eclipse, e il progetto EAR ha un progetto EJB che ha il nuovo progetto Java come uno dei progetti su cui dipende - se distribuito su JBoss localmente tramite eclipse, non c'è nessun problema e tutto procede senza problemi

Ma quando è stato distribuito a JBoss nell'ambiente di test (all'esterno di eclipse), ha continuato a recuperare java.lang.NoClassDefFoundError su una delle classi definite nel nuovo progetto Java.

Ho cercato all'interno del file EAR per arrivare al jar (progetto EJB), e quindi all'interno del jar, posso vedere la struttura della directory e tutti i file di classe dal nuovo progetto Java, ad es. La classe di cui si lamenta è proprio lì all'interno dell'EAR-> JAR e corrisponde alla struttura esatta che sta cercando.

Sono perso a cos'altro posso guardare.

Qualsiasi suggerimento è molto apprezzato!

Grazie

+0

ho provato tutto e mi dà ancora la stessa eccezione –

+0

Ho dimenticato di rispondere a questo thread - come aggiornamento: ho scoperto quale fosse il problema, il che era davvero sciocco, ad un certo punto lungo la strada, ho rinominato il nome del pacchetto cambiando un carattere in maiuscolo. per esempio.da packagename, a packageName - e da qualche parte lungo il percorso, alcuni file di classe lo fanno ancora riferimento con il vecchio nome (non in maiuscolo) e quindi il NoClassDefFoundError –

risposta

6

Spesso si verifica questo errore in caso di mancata corrispondenza nel modo in cui alcune classi sono state compilate. Ad esempio se hai compilato alcune delle classi in una versione successiva di JDK senza impostare il livello di conformità java e lo stai eseguendo con una versione precedente.

Il mio suggerimento è quello di verificare il JDK si esegue JBoss con, quindi controllare come è stato compilato le vostre classi

+0

Funnily, il problema era perché stavo cambiando il nome del pacchetto con un po ' caratteri maiuscoli o maiuscoli e viceversa, che rovinano i file all'interno del contenitore –

0

controllare il file dell'orecchio. la struttura come questa?

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 

in caso contrario, si dovrebbe reimballare il file dell'orecchio.

+0

Questo è praticamente come la struttura, sebbene nel jar EJB, ho persistence.xml invece di ejb-jar.xml –

0

Verificare la proprietà "Class-Path:" in META-INF/MANIFEST.MF.

+0

il Class-Path è vuoto –

+0

Prova a scrivere il jar di dipendenza, come "Class-Path: dependencyA.jar dependencyB.jar" –

1

Questo potrebbe anche essere dovuto a problemi di isolamento classloader se si dispone di più file di guerra/orecchio

1

I ha avuto un problema del genere con JBoss 4: ClassNotFoundException e NoClassDefFoundError in fase di esecuzione anche se il codice è stato compilato correttamente. Mi ci sono volute 4 ore per scoprire la causa.

Il BuildPath dei miei progetti era ok, il problema era effettivamente nel ClassPath di JBoss. L'ho risolto facendo: JBoss 4.2 RunTime Server> Apri configurazione di avvio> Modifica configurazione> ClassPath> aggiungendo JAR e progetti da collegare a JBoss con "Aggiungi JAR"/"Aggiungi progetti".

Eclipse conosceva le classi nei vasi e dei progetti connessi grazie alla BuildPath, quindi non c'era alcun errore nell'IDE, ma il server JBoss non sapeva dove trovare queste classi ...