Ich verwende Eclipse Helios Service Release 1 mit Tomcat 7.0.12 unter Linux Ubuntu Natty Narwhal.
Ich war glücklich, meine Webapps neu zu implementieren, bis sie aus scheinbar keinem Grund aufhörte. Die folgende Ausnahme wird angezeigt:
SEVERE: Allocate exception for servlet Index
Java.lang.ClassNotFoundException: obliquid.servlet.Index
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1676)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1521)
Was sollte ich noch prüfen? Vielen Dank.
UPDATEObwohl ich jetzt mit dem neuen Projekt arbeite, bin ich zurückgekommen, um das alte zu überprüfen, und auf mysteriöse Weise funktioniert es jetzt. Ich denke, ich werde nicht finden können, was passiert ist.
Heute jedoch hatte ich mit dem neuen Projekt 404 Fehler ohne ersichtlichen Grund. Ich fand heraus, dass ein Rechtsklick auf den Tomcat-Server und das Auswählen von "Bereinigen ..." nützlich sein können. Vielleicht hätte es helfen können.
Wenn Sie "Bereinigen ..." auswählen, wird Folgendes angezeigt: "Bei der Bereinigung werden alle Veröffentlichungszustände gelöscht und neu erstellt. Möchten Sie wirklich alle veröffentlichten Ressourcen bereinigen?". Ja, ich habe das Problem gelöst
UPDATE 2 Beim neuen Projekt ist es wieder passiert. 404 Fehler, diesmal gehen sie nicht weg.
Stop -> Clean... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Clean... -> Start (404)
Stop -> Remove on the application -> Clean... -> Run As -> Run on Server -> (404)
Exit Eclipse, Start Eclipse
Start the server -> (404)
UPDATE 3 Es stellte sich heraus, dass ich diesmal gerade keine Ausnahme bemerkte, die durch eine Listener-Klasse beim Start verursacht wurde. Nachdem das Problem gelöst war, funktionierte es. Ich denke, ich sollte um 3 Uhr morgens aufhören zu arbeiten.
Bei Tomcat 6 und Eclipse Ganymede fand ich die folgende Kette heraus, die wie ein Zauber wirkt:
1 Server stoppen
2 Projekt -> sauber
3 Projektaufbau (ich hatte den automatischen Aufbau deaktiviert)
4 Server löschen
5 Server-Ordner löschen
6 Starten Sie Eclipse erneut
7 Neuen Server erstellen, Projekt hinzufügen und starten :)
dauert einige Zeit, arbeitete aber wie charmant. Mein Problem war ein irritierendes Startproblem beim Listener, aber es scheint etwas Ähnliches zu sein: eine Eigenschaft bei Tomcat. Btw: Heutzutage bin ich auch ein großer Glassfish-Fan.
Ich habe festgestellt, dass dieses Verfahren nützlich ist:
Hoffentlich sollte die ClassNotFoundException jetzt verschwunden sein.
Ein anderes Mal hatte ich ein Problem mit einer Klasse, die beim Serverstart gestartet wurde, eine Ausnahme in einer Listener-Klasse (ServletContextListener). Wenn ein ServletContextListener während des Startens eine Ausnahme auslöst, wird die Anwendungsbereitstellung abgebrochen, daher die 404-Fehler. In diesem Fall löste die Anwendung das Problem, durch das die Ausnahme verursacht wurde, erneut.
EDIT: Diese kürzere Prozedur funktionierte meistens für mich, aber heute funktionierte es nicht und ich musste der erweiterten Prozedur von Mico folgen. Mein Vorschlag ist, wenn Sie ein ähnliches Problem haben, versuchen Sie zuerst dieses kürzere Verfahren. Wenn das Problem weiterhin besteht, versuchen Sie es mit Mico.
Ich würde empfehlen, den Tomcat-Server erneut anzuhalten und zu starten. Hot Deploy funktioniert nicht für immer. Es gibt einige Probleme, die dazu führen, dass Sie nach einigen Neuinstallationen neu starten müssen.
Ich frage mich, wann ich die akzeptierte Antwort mit +25 sehe ist es wirklich genau ?
Zuerst, wenn Sie den Server löschen, was ist der Punkt bei der Reinigung? Es wird deine Zeit unnötig dauern und nichts Nützliches wirst du gewinnen.
Also werde ich sagen, nur 5, 6, 7 Schritte sollten die Magie tun
5 Server-Ordner löschen
6 Starten Sie Eclipse erneut
7 Neuen Server erstellen, Projekt hinzufügen und starten
Dies könnte etwas sein, das ich auf con-fess 2011 gelernt habe. Für mich klingt das nach einem Classloader-Problem.
Die Theorie dahinter:
Java verwendet nicht nur den Typ der Klasse, sondern auch den Classloader, mit dem der Typ geladen wurde, um den Typ einer Instanz zu identifizieren. Dies bedeutet, dass eine einfache Operation fehlschlagen könnte, z.
ClassA a1 = new a1; ClassA a2 = SomeOtherClass.giveMeInstanceOfA (); A1 = a2;
Dieses Beispiel schlägt fehl, wenn SomeOtherClass einen anderen Classloader verwendet, da Java sagen würde, dass sie nicht identisch sind.
Was bedeutet das in der Praxis:
Sie stellen Ihre Webapp auf dem Server bereit, alles läuft einwandfrei. Der Server speichert die Klassen und alles, was er benötigt, um sie irgendwo zu laden. Jetzt erstellen Sie ein heißes Bereitstellungsprogramm, und der Server lädt möglicherweise neue Klassen mit einem neuen (oder einem anderen) Klassenladeprogramm. Dies ist der Punkt, an dem es gefährlich wird, weil Sie nun zwei verschiedene Klassen im Speicher haben, die gleich sein sollten. Einfache Operationen wie Umsetzungen (ClassA a = (ClassA) new ClassA ()) schlagen fehl, neue Methoden innerhalb der Klasse werden nicht gefunden (da der Server eine zwischengespeicherte Version ohne diese Methode verwendet),.
Dies ist der Punkt, an dem ich den Server neu starte, das Arbeitsverzeichnis bereinigt (um die zwischengespeicherten Versionen zu entfernen) und anfange, Hot Deployment als kritisch zu betrachten.
Wenn es möglich ist, das Verfahren von Mikkos auszuprobieren, um das Problem zu lösen, kann Ihnen diese Erklärung helfen, den Grund dafür zu verstehen.
Ich weiß, dass dies Ihr Problem nicht löst, könnte Ihnen jedoch einige Hinweise geben, was möglicherweise passiert sein könnte.
Ich habe neue Erfahrungen mit dem Programmieren gesammelt und bin nicht mehr an der Kombination Eclipse + Tomcat verhungert. Verschiedene Möglichkeiten können Ihnen dabei helfen, diese Kombination zu verwenden:
Verwenden Sie sie zuerst nicht zusammen!
Sie können andere verfügbare IDEs verwenden, z. IntellijIdea (das ist nicht kostenlos, aber lohnt sich zu investieren) hat die Eigenschaft, dass Sie beim Debuggen eines Java-Codes den Code im laufenden Betrieb ändern und die Java-Dateien einzeln kompilieren können auf dem Server aktualisiert. Es ist fast nie ein Neustart erforderlich (natürlich geht es manchmal verloren, aber hauptsächlich funktioniert es).
Verwenden Sie einen Standalone-Tomcat-Server, nicht den in Eclipse/Ihrer IDE. Der erste Trick funktioniert nur, wenn Sie einen externen Server debuggen, nichts in der IDE. Der zweite Tipp: Wenn Sie nur den Inhalt von jsp oder html ändern, können diese Dateien mit dem Befehl unix cp oder windows copy manuell an die richtige Stelle im webapp-Ordner von Tomcat kopiert werden können Sie den Ordnerinhalt (z. B. meinOrdner/*. jsp) beliebig oft kopieren und es ist kein Neustart erforderlich. Die Änderungen werden sichtbar, wenn Sie die Datei web.xml im Ordner webapps berühren oder bearbeiten und speichern und anschließend die sichtbare Seite im Browser aktualisieren. Wahrscheinlich ist das Auffrischen mit STRG + F5 der beste Weg.
Danke an @Verdan für seinen Kommentar, sonst wäre ich nicht wieder gekommen, um zu antworten.
Ich habe momentan mit dem gleichen Problem zu kämpfen, aber nichts, was hier erwähnt wird, hilft mir nicht. Wie auch immer, ich habe das herausgefunden, wenn ich:
alles funktioniert gut, natürlich bis ich etwas im Code ändere und versuche, es erneut zu testen.
Ich konnte dieses Problem lösen, indem ich die Maven-Natur deaktiviere (Rechtsklick auf Projekt >> Maven >> Maven-Natur deaktivieren). Aktivieren Sie es dann erneut (klicken Sie mit der rechten Maustaste auf Projekt >> Konfigurieren >> In Maven-Projekt konvertieren). Ich hatte alle anderen Tipps und Tricks ausprobiert, aber das ist der, der endlich funktioniert hat.
Apropos Hotcat-Bereitstellung von Tomcat: In der Tat treten verschiedene Probleme auf, von denen das geringste Speicherverlust ist. Deshalb müssen Sie die Anwendung neu starten. Ich würde empfehlen, JRebel für eine schnelle Umstellung von "Änderungen vornehmen und speichern und dann den Browser aktualisieren und die Änderungen sofort sehen" zu empfehlen. Sie finden das JRebel-Praktikum, das zeigt, wie es mit Tomcat und Eclipse verwendet wird. http://www.javapassion.com/rebels/jrebel_basics/
Ich hatte das gleiche Problem - ich versuchte alle oben genannten Punkte. Eclipse stoppte immer, wenn ich versuchte, den Server zu starten, selbst nachdem ich alle Server-Konfigurationen gelöscht und eine neue mit einer frisch heruntergeladenen Tomcat-Instanz erstellt hatte. Wie auch immer, das Problem wurde nicht gelöst, bis ich zu einem neuen Arbeitsbereich gezogen bin, die Projekte erneut importiert und einen neuen Server erstellt habe. Scheint mir wie ein Eclipse-Bug ... Wenn also nichts anderes funktioniert, ist dies der richtige Weg ...