2011-01-14 11 views
6

Ich habe versucht, nach Postings zu suchen, die mir helfen könnten, kann keine finden.java.lang.NoClassDefFoundError wenn die Datei da ist

Ich bin ein Ohr auf JBoss4 Server bereitstellen, und ich begann dieses Problem seit ich ein neues Projekt hinzugefügt. Dieses neue Projekt wird als Java-Projekt in Eclipse definiert, und das EAR-Projekt hat ein EJB-Projekt, das das neue Java-Projekt als eines der Projekte abhängig macht. Wenn es auf JBoss lokal über Eclipse bereitgestellt wird, gibt es kein Problem und alles läuft reibungslos

Aber wenn JBoss in Testumgebung (außerhalb Eclipse) bereitgestellt wird, erhalten java.lang.NoClassDefFoundError auf einer der Klassen, die im neuen Java-Projekt definiert sind.

Ich schaute in die EAR-Datei, um zum Jar (EJB-Projekt) zu gelangen, und dann innerhalb des Jar, kann ich die Verzeichnisstruktur und alle Klassendateien aus dem neuen Java-Projekt sehen - dh. Die Klasse, über die sie sich beschwert, ist genau dort in der EAR-> JAR und stimmt mit der genauen Struktur überein, nach der sie sucht.

Ich bin verloren, was ich sonst noch sehen kann.

Alle Zeiger werden sehr geschätzt!

Dank

+0

Ich habe versucht, alles und es gibt mir immer noch die selbe Ausnahme –

+0

Ich habe vergessen, auf diesen Thread zu antworten - als Update: Ich habe herausgefunden, was das Problem war, das war wirklich albern, irgendwann auf dem Weg, habe ich den Paketnamen umbenannt, indem ich a Zeichen zu groß geschrieben. z.B.von Paketname zu Paketname - und irgendwo auf dem Weg verweisen einige Klassendateien immer noch auf den alten Namen (nicht groß geschrieben) und daher NoClassDefFoundError –

Antwort

6

Dieser Fehler tritt häufig auf, wenn bei der Kompilierung einiger Klassen ein Konflikt auftritt. Zum Beispiel, wenn Sie einige der Klassen in einer späteren Version des JDK kompiliert haben, ohne die Java-Kompatibilitätsstufe festzulegen, und Sie diese mit einer früheren Version ausführen.

Mein Vorschlag ist, das JDK überprüfen Sie mit JBoss ausgeführt wird, dann überprüfen Sie, wie Sie Ihre Klassen zusammengestellt

+0

Lustig war das Problem, weil ich den Paketnamen mit einigen änderte Zeichen, die nicht groß geschrieben werden oder umgekehrt, und es werden die Dateien in dem Jar vermasselt –

0

überprüfen ur Ohr-Datei. die Struktur so?

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 

Wenn nicht, sollten Sie Ihre EAR-Datei neu verpacken.

+0

Das ist so ziemlich wie die Struktur ist, obwohl ich in der EJB Jar persistence.xml habe anstelle von ejb-jar.xml –

0

Überprüfen Sie die Eigenschaft "Klassenpfad:" in META-INF/MANIFEST.MF.

+0

der Klassenpfad ist leer –

+0

Versuchen Sie, das Abhängigkeitsjar zu schreiben, wie "Klassenpfad: dependencyA.jar dependencyB.jar" –

1

Dies auch aufgrund Classloader Isolation Probleme sein könnte, wenn Sie mehrere Krieg/Ohr Dateien

1

Ich habe hatte ein Problem wie JBoss 4: ClassNotFoundException und NoClassDefFoundError zur Laufzeit, auch wenn der Code gut kompiliert wurde. Ich brauchte 4 Stunden, um die Ursache herauszufinden.

Der BuildPath meiner Projekte war in Ordnung, das Problem lag tatsächlich im ClassPath von JBoss. Ich löste es mit JBoss 4.2 RunTime Server> Startkonfiguration öffnen> Konfiguration bearbeiten> ClassPath> Hinzufügen von JARs und Projekten zum Verknüpfen mit JBoss mit "Add JARs"/"Add Projects".

Eclipse-kannte die Klassen in den JAR-Dateien und die damit verbundenen Projekte dank der BuildPath, so gab es keine Fehler in der IDE, aber der JBoss-Server nicht wusste, wo diese Klassen finden ...

Verwandte Themen