2010-02-10 11 views
40

Ich habe ein Java-Projekt in Eclipse perfekt läuft reibungslos bis heute Nachmittag, als ich einige Dateien aktualisiert (einschließlich einer ant build.xml-Datei). Wenn ich das Projekt erstelle, erscheint der folgende Fehler:Seltsam "java.lang.NoClassDefFoundError" in Eclipse

java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter 
Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
Exception in thread "main" 

Hat jemand eine Ahnung, wo das Problem sein kann?

Antwort

9

java.lang.ClassNotFoundException bedeutet CLASSPATH-Probleme. Keine Ahnung zu haben bedeutet, dass Sie davon ausgehen, dass der CLASSPATH richtig eingestellt ist, aber nicht.

Wenn Sie mit Eclipse erstellen, stellen Sie sicher, dass das Verzeichnis, in dem Ihre kompilierten .class-Dateien vorhanden sind, im CLASSPATH enthalten ist und die erforderlichen .class-Dateien enthält.

Wenn Sie mit Ant Gebäude sind, stellen Sie sicher, dass Sie so etwas in Ihrer build.xml sehen:

<path id="production.class.path"> 
    <pathelement location="${production.classes}"/> 
    <pathelement location="${production.resources}"/> 
    <fileset dir="${production.lib}"> 
     <include name="**/*.jar"/> 
     <exclude name="**/junit*.jar"/> 
     <exclude name="**/*test*.jar"/> 
    </fileset> 
</path> 

UPDATE: Entweder man nicht JAVA_HOME/bin im PATH oder Sie heruntergeladen haben die JRE statt JDK. Überprüfen Sie das Verzeichnis, in dem Sie Java installiert haben, und prüfen Sie, ob in Ihrem Verzeichnis/bin javac.exe enthalten ist. Wenn Sie kein/bin haben, laden Sie das JDK herunter und installieren Sie es.

Wenn Sie ein/bin mit javac.exe darin haben, überprüfen Sie Ihren PATH, um zu sehen, dass sich das Java/bin-Verzeichnis im PATH befindet. Sobald Sie es eingerichtet haben, öffnen Sie eine Befehlsshell und geben Sie "javac -version" ein, um sicherzustellen, dass alles in Ordnung ist.

Welche JDK haben Sie Eclipse zu verwenden?

+0

alles scheint in Ordnung zu sein. Ich habe gerade bemerkt, dass wenn ich die build.xml-Datei erstellen fehlschlägt und der folgende Fehler angezeigt wird: Fehler beim Ausführen von javac.exe Compiler auf diese Zeile der Build-Datei zeigen: '' Es scheint der Compiler fehlt, denken Sie, dass der vorherige Fehler ist mit diesem verwandt? Danke vielmals! – Anto

+0

Ich habe die Variable JAVA_HOME/bin auf den Ordner bin gesetzt, in dem die javac.exe-Datei enthalten ist (jdk 1.6.0_18). In der Install JRE-Sektion von Eclipse habe ich die jdk 1.6.0_18 hinzugefügt, also scheint alles perfekt eingestellt zu sein. Eine Sache, die ich bemerkt habe (und ich weiß nicht, ob es relevant ist oder nicht), ist, dass im Eigenschaften-Dialog des Projekts im Abschnitt "Java-Compiler" die "Einhaltung der Ausführungsumgebung auf dem Java-Build-Pfad verwenden" ist immer deaktiviert und kann nicht aktiviert werden, während in den anderen Projekten dieses Problem nicht existiert .... Danke für die Hilfe! – Anto

0

sowohl das Problem wegen classpathref sein = „Master-Classpath“, überprüfen Sie bitte der Wert korrekt ist

+0

so denken Sie, es besser wäre, die 'classpathref =" Master-classpath' aus der Build-Datei und erstellen Sie eine Classpath Variable in Eclipse zu entfernen? – Anto

+0

bitte diese für das zweite Problem Fehler Lauf für das erste Problem überprüfen Der javac.exe-Compiler zeigt auf diese Zeile der Build-Datei: es ist weniger wahrscheinlich, dass javac nicht da sein wird ... das problem könnte sein, weil einige andere parameter falsch sind, also konfiguriere den klassenpfad in eclipse und gebe die aussage wie folgt sreejith

1

ich dies zu oft in letzter Zeit ein wenig zu sehen. Gerade heute hatte ich das Problem mit einer Klasse im gleichen Paket wie die betroffene (rot markierte) Klasse!

Das Beenden von Eclipse und Neustart funktioniert im Allgemeinen, um die rote Flagge der betroffenen Klasse zu beheben, aber manchmal bleibt eine rote Flagge auf dem Projekt, dann muss ich auch das Projekt schließen und es wieder öffnen, um das eigenständige Rot loszuwerden Flagge. Es sieht ziemlich komisch aus, eine rote Flagge in einem Projekt zu sehen, ohne rote Flaggen in einem seiner untergeordneten Verzeichnisse.

Mit Maven-Projekt-Clustern schließe und öffne ich alle Projekte im Cluster nach dem Neustart von Eclipse.

1

Dies scheint ein häufiger Fehler zu sein. Die Lösung ist:

  • Rechtsklick Projekt
  • Eigenschaften wählen
  • wählen 'Java-Compiler'
  • unclick das erste Feld zu sagen 'Enable projektspezifische Einstellungen'
  • gelten
  • speichern
  • Lauf

Hoffe das hilft in einigen Fällen.

+2

[Ein anonymer Benutzer Kommentare] (http://stackoverflow.com/suggested-edits/212846): "4: - Klicken Sie auf 'projektspezifische Einstellungen aktivieren' und setzen Sie 'Java compliance level 1.5 hinzufügen', sonst wird es zu Fehlern führen" – Rup

+0

Funktioniert immer noch nicht und vor allem, wenn Probleme direkt nach der Implementierung der Tween-Engine in den libs-Ordner behoben werden. Ich muss einen Weg finden, wie ich auf einem Android-Gerät laufen kann. Übrigens benutze ich '' java-universal-tween-engine''. –

+0

Ich hatte das gleiche Problem auf Android und dies behoben mein Problem, ich dono wie oder warum das passiert, aber danke :) –

1

Während dies eine wilde Vermutung ist und möglicherweise nicht in Ihrer spezifischen Situation anwendbar ist, könnte dies mich eine Stunde oder so gespeichert haben.

Wenn Sie ein einfaches Projekt in ein Java-Projekt "konvertiert" haben (indem Sie die .project-Datei bearbeiten und das entsprechende Tag hinzufügen), müssen Sie auch ein richtiges angeben - mein Projekt wurde nicht erstellt, obwohl Eclipse versucht hat und renn keine Erbauer (Erfolg!):

<buildSpec> 
    <buildCommand> 
     <name>org.eclipse.jdt.core.javabuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
</buildSpec> 
1

Ich war auch mit dem gleichen Problem konfrontiert. Dann wurde festgestellt, dass der Pfad für den lib-Ordner im Klassenpfad nicht ordnungsgemäß festgelegt wurde.

1

Stab im Dunkeln, aber ich hatte das gleiche genaue Problem. Ich löste es, indem ich das Projekt aus meinem Arbeitsbereich löschte (vorsichtig sein, nicht vom Datenträger zu löschen), und das Projekt dann wieder importierte und es funktionierte gut. Ich denke, dass meine Ursache durch einen schlechten Windows-Shutdown verursacht wurde (das korrekte Neustarten von Windows hat das Problem nicht behoben). HTH.

32

Doing Project-> Clean ... in Eclipse löste dieses Problem für mich.

+1

Ich hatte das gleiche Problem, das ich wahrscheinlich verursacht durch den Versuch, die _bin_ löschen Ordner meines Projekts. Danke für den Clean Vorschlag ... es hat für mich funktioniert! – FriendFX

+1

Ein anderes übliches Problem könnte sein, dass das Projekt nicht mit dem Dateisystem synchronisiert ist. Die Lösung besteht einfach darin, das Projekt zu aktualisieren (F5). –

+0

Ich habe diese und viele andere Alternativen ausprobiert und nicht funktioniert. ** Löschen des Arbeitsbereichs ** funktionierte nur für mich. –

0

Wenn Sie Ihr Programm starten, speichert es die Startkonfiguration, die Sie später ändern können. Wenn sich in Ihrem Build-/Ausführungsprozess etwas geändert hat, haben Sie möglicherweise falsche Einstellungen. Zum Beispiel habe ich mit Maven gearbeitet, und einige starten Konfigurationsreferenz a maven2_classpath_container. Wenn Sie die Startkonfiguration löschen und das Programm erneut ausführen, kann es wieder funktionieren.

3

Wie oben erwähnt, bedeutet "java.lang.ClassNotFoundException CLASSPATH-Probleme."

In meinem Setup, ich bin mit Maven (anstelle von Ant) zu bauen und Eclipse (anstelle von Netbeans).

Normalerweise, um das Projekt zu erstellen und einzurichten, werde ich 'mvn clean', 'mvn compile', 'mvn eclipse: eclipse' von der Windows-Eingabeaufforderung ausführen. Der letzte Befehl 'mvn eclipse: eclipse' aktualisiert die Projektkonfiguration und erstellt .classpath- und .project-Dateien.

Um das Problem zu beheben, löschte ich die beiden Dateien (.classpath und .project) und führte dann die drei Befehle erneut aus.

Versuchen Sie also, abhängig von Ihrer Konfiguration, die Klassenpfad-/Projektdateien zu finden (eine Sicherungskopie erstellen) und löschen Sie sie. Sie können auch versuchen, den Ordner target/release/build zu löschen (was auch immer mit dem Build-Befehl erstellt wird). Versuchen Sie dann, Ihr Projekt erneut zu erstellen, zu packen und zu konfigurieren.

2

Ich dachte mein Problem und seine Lösung könnte helfen.So bekam ich den gleichen Fehler in meiner Eclipse-Projekt.In meinem Projekt habe ich paar JAR-Dateien und die NOCLASSDEFERROR wurde für eine Datei in der JAR-Datei geworfen.

Meine Bibliothek Dateien waren Teil eines Ordnernamen „lib“ in meinem Projekt heirarchy.I meine Ordner geändert Name „Libs“ auf und voila hat es funktioniert.

(Ich schaute in die .classpath Datei und ich hatte Paare Schlüsselwert, und der Eintrag für meine JAR-Datei Schlüssel mit dem Namen „lib“ hatte und daher dachte ich, wahrscheinlich von lib helfen könnte, zu verändern.)

1

I Ich habe festgestellt, dass ich ein JAR in WEB-INF/lib hatte, das in meinem Classpath war, aber als ich es auf die neueste Version hochstufte, war der Dateiname anders. Durch das Entfernen der alten JAR-Datei aus dem Klassenpfad und das Hinzufügen der neuen JAR-Datei wurde das Problem behoben. Seltsamerweise schien Eclipse mich nicht zu warnen, dass die alte JAR-Datei fehlte und zu kompilieren schien, aber nichts wurde kompiliert, daher NoClassDefFoundError. Der Hinweis für mich war, dass das Verzeichnis build/classes im Projekt als Ausgabeordner eingerichtet wurde, aber nach dem Build keine Klassendateien erstellt wurden.

0

Ich sehe, dass Leute bereits über Klassenpfad gesprochen haben.Da es keine akzeptierte Antwort gibt, nehme ich an, dass sie nicht mit dem Klassenpfad zusammenhängt. Also möchte ich hinzufügen, dass die Nicht-Paket-Anweisung auch zu Klassenfehlern führen kann.

1

gehen Sie zum Build-Pfad und überprüfen Sie auf Fehler in den JAR-Dateien, sie könnten an einen anderen Ort verschoben werden. wenn Sie Fehler in den JAR-Dateien haben. Entfernen Sie sie und suchen Sie sie, indem Sie auf externe Gläser hinzufügen klicken.

-cnufederer

1

Stellen Sie sicher, dass alle Bibliotheken, die Sie in Ihrem Projekt verwenden, sind von anderen Projekt nicht werden int den Arbeitsbereich verwiesen. Das war mein Problem.

1

Ich hatte ein ähnliches Problem und es hatte mit den Bibliotheken zu tun, auf die der Java-Build-Pfad verweist; Ich referenzierte Bibliotheken, die nicht mehr existierten, als ich ein Update machte. Wenn ich diese Referenzen entfernt habe, startet das Projekt erneut.

Die Bibliotheken sind unter dem Java-Buildpfad im Fenster Projekteigenschaften aufgeführt.

Hoffe, das hilft.

-1

VON ABDULHAYEE:

NoClassDefFoundError in Java kommt, wenn Java Virtual Machine nicht in der Lage ist, eine bestimmte Klasse zur Laufzeit zu finden, die während der Kompilierung zur Verfügung stand. Wenn beispielsweise ein Methodenaufruf von einer Klasse oder ein Zugriff auf ein statisches Member einer Klasse erfolgt und diese Klasse während der Laufzeit nicht verfügbar ist, wird JVM NoClassDefFoundError auslösen. Es ist wichtig zu verstehen, dass dies anders ist als ClassNotFoundException, die auftritt, wenn versucht wird, eine Klasse nur zur Laufzeit zu laden, und der Name während der Laufzeit und nicht zur Kompilierzeit angegeben wurde. Viele Java-Entwickler vermischen diese beiden Fehler und werden verwirrt.

Kurz gesagt wird NoClassDefFoundError kommen, wenn eine Klasse während der Kompilierzeit vorhanden war, aber zur Laufzeit nicht in Java-Klassenpfad verfügbar war. Normalerweise werden Sie unter Zeile im Protokoll sehen, wenn Sie NoClassDefFoundError erhalten: Ausnahme im Thread "main" java.lang.NoClassDefFoundError Ausnahme im Thread "Main" zeigen Sie einfach, dass seine "Main" -Thread ist nicht in der Lage, eine bestimmte Klasse zu finden könnte ein beliebiger Thread sein, mach dir also keine Sorgen. Der Unterschied zwischen diesem Fehler im Haupt-Thread und anderen Thread ist, wennException im Thread "Haupt" kommt Programm abstürzt oder schließen Sie es selbst im Gegensatz zu anderen Thread in diesem Fall Ihr Programm wird weiter ausgeführt.,

Lesen Sie mehr: http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2jr35SsaZ

0

Dieser arbeitete für mich in eclipse:

  1. Goto Projekt -> Eigenschaften
  2. Klicken Sie auf Registerkarte Quelle
  3. Deaktivieren Sie das Kontrollkästchen -> Zulassen Ausgabeordner für Quellordner
  4. die Änderungen übernehmen und das Projekt
0

Ein weiterer Anlass laufen, wenn java.lang.NoClassDefFoundError passieren kann, während der zweiten/nachfolgende Versuche ist die Klasse zu instanziiert nach Der erste Versuch ist für eine andere Ausnahme oder einen anderen Fehler fehlgeschlagen. Der Klassenlader scheint Wissen zu cachen, dass es die Klasse beim ersten Versuch nicht instanziieren konnte, aber nicht der Grund dafür. Daher meldet es NoClassDefFoundError.

Es ist also eine gute Idee, sicherzustellen, dass es keine Fehler/Ausnahmen bei einem früheren Versuch gab, die Klasse zu instanziieren, bevor sie in einen Kaninchenbau gehen und versuchen, den NoClassDefFoundError zu beheben.

0

Wenn Sie mit Eclipse Project versuchen> sauber und dann versuchen, den Server neu zu starten

0

Für mich ist die Frage war ich einen anderen Ordner unter „Run-Konfigurationen“ konfiguriert hatten, die ohne die neuesten Änderungen eine Klasse hatte. Sobald ich es in Bezug auf den richtigen Ordner Ordner entfernt hatte, begann es zu arbeiten. Hoffe es hilft jemandem.

Verwandte Themen