Frage

Wir sind die Bereitstellung einer WAR-Datei in Tomcat 5.5 und es funktioniert gut, wenn WEB-INF \ classes .classes Dateien enthält, aber wenn wir bewegen die .jar-Datei enthält, dass .classes in WEB-INF \ lib wir eine bekommen Ausnahme zur Laufzeit beschweren, dass java.lang.NoSuchMethodError, aber vorhandene Klassendatei in .jar-Datei enthält die Klasse und Methode macht Ausfahrten!

Jede Hilfe auf diesem würde geschätzt.

War es hilfreich?

Lösung

Dies könnte aufgrund einer Klassenkonflikt verursacht werden. Stellen Sie sicher, dass es nicht eine ältere Version der Klasse ist irgendwo (Tomcat freigegebenen Ordner, WEB-INF / classes, WEB-INF / lib). Wenn dies der Fall ist, kann man praktisch nicht wissen, welche Klasse Tomcat geladen werden. Wenn es eine ohne das Verfahren nimmt, tritt die Ausnahme Sie erleben.

Andere Tipps

Da Sie eine NoSuchMethodError bekommen, und nicht eine ClassNotFoundError, bedeutet es, dass Sie eine alte Version der Klasse irgendwo (außerhalb der JAR-Datei). Sie müssen finden und zu entfernen.

Dies ist defently Klasse closin Bitte werfen Sie einen Blick in hier http: //tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html#Class%20Loader%20Definitions

, wie Sie gibt es eine höhere Priorität für die Klassen unter WEB-INF / classes sehen können WEB-INF / lib zu vergleichen. Sie haben zwei Klassen mit dem gleichen Namen (und Paket). Als einer von ihnen in den Klassen ist Ordner, dass es eine höhere Priorität hat. wenn sie beide in lib Ordner sind dann die zweite bekommen erste (Gläser haben eine Priorität auf der Grundlage ihrer alpha-betischer Reihenfolge)

Dies kann Ihre Situation erklären.

Hoffe, es hilft  - Yonatan

Aus der Perspektive einer Web-Anwendung, Klasse oder Laden von Ressourcen sieht in den folgenden Repositories, in dieser Reihenfolge:

Bootstrap Klassen Ihrer JVM
System Class Loader-Klassen (wie oben beschrieben)
/ WEB-INF / classes Ihrer Web-Anwendung
/WEB-INF/lib/*.jar Ihrer Web-Anwendung
Gemeinsame Klassenladeklassen (wie oben beschrieben)

Die Standorte von "Common Class Loader" gesucht werden durch die common.loader Eigenschaft in $ CATALINA_BASE / conf / catalina.properties definiert. Dies ist, wo wir Anteil Standort aktivieren / definieren;
shared.loader = $ {catalina.base} / shared / classes, $ {catalina.base} / shared / lib / *. jar

Und die oben gibt, um mehr Einblick in die Frage, die Sie gegenüber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top