Es tut mir leid, meine Frage ist dumm, aber ich kann es nicht beantworten, als ein Java-Analphabet. Ich betreibe einen Tomcat (5) auf CentOS5 (für einen CAS-Server), und wenn ich versuche, diese URL zu öffnen Ссылка Ich erhalte diesen Fehler:
erster Fehler: java.lang.NoClassDefFoundError: Die Klasse org.springframework.webflow.util.RandomGuid
konnte nicht initialisiert werdenund Root-Fehler: org.springframework.web.util.NestedServletException: Handler-Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist java.lang.NoClassDefFoundError: Die Klasse org.springframework.webflow.util.RandomGuid
konnte nicht initialisiert werden$ CLASSPATH ist leer und es scheint ein Problem zu sein, aber ich weiß nicht, was ich hineinlegen soll.
EDIT: Jared hat Recht, meine Hosts-Dateien haben 127.0.0.1 als localhost definiert, und jetzt funktioniert es sehr gut!
Es ist wichtig, in diesem Fall zwei oder drei verschiedene Ausnahmen im Kopf zu behalten:
java.lang.ClassNotFoundException
Diese Ausnahme gibt an, dass die Klasse nicht im Klassenpfad gefunden wurde. Dies zeigt an, dass wir versucht haben, die Klassendefinition zu laden, und die Klasse nicht im Klassenpfad existiert.
java.lang.NoClassDefFoundError
Diese Ausnahme gibt an, dass die JVM in ihrer internen Klassendefinitionsdatenstruktur nach der Definition einer Klasse gesucht und diese nicht gefunden hat. Dies ist anders als zu sagen, dass es nicht aus dem Klassenpfad geladen werden konnte. Normalerweise zeigt dies an, dass wir zuvor versucht haben, eine Klasse aus dem Klassenpfad zu laden, aber es ist aus irgendeinem Grund fehlgeschlagen - jetzt versuchen wir es erneut, aber wir werden es nicht einmal versuchen, weil wir es früher nicht geladen haben. Der frühere Fehler könnte eine ClassNotFoundException oder ein ExceptionInInitializerError sein (was einen Fehler im statischen Initialisierungsblock anzeigt) oder irgendeine Anzahl anderer Probleme. Der Punkt ist, ein NoClassDefFoundError ist nicht unbedingt ein Klassenpfadproblem.
Ein anderes Antwort-Poster zeigt an, dass der RandomGUID einen Aufruf von InetAddress.getLocalHost () erfordert. Auf vielen Betriebssystemen würde dies eine Host-Suche auslösen, die die hosts-Datei verwendet ( /etc/hosts
auf * NIX-Systemen, %WINDOWS%/system32/drivers/etc/HOSTS
auf einem Windows-System).
Ich habe ziemlich häufig ähnliche Fehler gesehen, wenn diese Datei die Localhost-Adresse falsch definiert. 127.0.0.1
sollte auf 'localhost' (und wahrscheinlich auch localhost.localdomain
) zeigen. Es sollte NICHT auf den tatsächlichen Hostnamen des Rechners zeigen (obwohl aus irgendeinem Grund viele ältere RedHat Linux Installer es mögen) setze es falsch.)
Heutzutage sollte die Umgebungsvariable $ CLASSPATH nicht verwendet werden; Stattdessen sollte die Java-Anwendung den Klassenpfad in der Befehlszeile festlegen.
Im Falle von Tomcat und Bibliotheken, die in den Webapps verwendet werden, legen Sie die JARs (für Spring) einfach in den Ordner shared / lib / der Tomcat-Installation.
NoClassDef: Die gesuchte Klassendefinition existierte, als die aktuell ausgeführte Klasse kompiliert wurde, aber die Definition nicht mehr gefunden werden kann. Da du eine Spring-Klasse vermisst, würde ich vermuten, dass du eine der Spring-Jar-Dateien vermisst.
Es gibt 2 Orte, um Gläser in tomcat zu legen, es gibt einen globalen Bereich (der in 5 etwas wie common / lib ist und ein bisschen anders in tomcat6 ist) und der Bereich nur für Ihre Webapp, die webapps / mywebapp / WEB ist -INF / lib. Die Gläser für Ihre App sollten wirklich hier hingehen, aber wenn Sie wirklich perplex sind und keine andere Möglichkeit finden, es zum Laufen zu bringen, werden sie im globalen Bereich funktionieren (wenn Sie nur einige davon im globalen Kontext haben) brechen auch, da sie vielleicht eine Klasse in einem anderen Jar benötigen und wenn ein Stück in der lokalen ist, wird es nicht funktionieren. Dies gilt insbesondere für Frühjahr Bibliotheken, da es eine Reihe von separaten Gläsern, nicht nur eine ist.
Ihr CLASSPATH ist eine Liste von überall wo der jvm nach Klassen sucht. Dies könnte Verzeichnisse von Klassendateien oder jar oder zip-Dateien von Klassen umfassen, die wie Verzeichnisse aufgelistet sind. Tomcat sollte das für Sie laden, indem Sie die oben genannten Verzeichnisse korrekt verwenden.
Der Grund ist Fehler beim Laden der Klasse RandomGUID.
Aus dem Blick auf RandomGUID Quelle , die meisten der Die Wahrscheinlichkeit, dass der statische Initialisierer bei InetAddress.getLocalHost () fehlgeschlagen ist.
Haben Sie eine seltsame Netzwerkkonfiguration auf dem Host? Zum Beispiel, keine oder seltsame Localhost-Definition in / etc / hosts?