Ich leite ein Maven-Projekt, das auch ein dynamisches Webprojekt ist. Ich habe alle Spring-Bibliotheken in Maven verwendet. Ich habe erstellt web.xml
, aber wenn ich meinen Tomcat 7-Server starte, wird folgende Meldung angezeigt:
INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Ich habe versucht, das Servlet aus zu löschen webapp/lib
, aber es hat nicht funktioniert. Lassen Sie mich wissen, was in meinem Fall zu tun ist.
Antworten:
Die .jar-Datei der Servlet-API darf nicht in die Webanwendung eingebettet werden, da der Container diese Klassen offensichtlich bereits in seinem Klassenpfad hat: Er implementiert die in dieser JAR enthaltenen Schnittstellen.
Die Abhängigkeit sollte in Ihrem Maven-POM im
provided
Bereich und nicht im Standardbereich liegencompile
:quelle
Sie erhalten diese Warnmeldung, wenn die Servlet-API-JAR-Datei bereits in den Container geladen wurde und Sie versuchen, sie erneut aus dem
lib
Verzeichnis zu laden .servlet.jar
Sie die Warnmeldung, indem Sie sie einfach aus Ihremlib
Verzeichnis entfernen .lib
Verzeichnis nicht finden, suchen Sie nach Ihrem Erstellungspfad und entfernen Sie das JAR.Wenn Sie ein Maven-Projekt ausführen, ändern Sie die
javax.servlet-api
Abhängigkeit in den Bereichprovided
in Ihrer pom.xml, da der Container das Servlet-JAR bereits selbst bereitgestellt hat.quelle
Um dies zu beheben, setzen Sie den Bereich auf " Bereitgestellt" . Dies weist Maven an, den Code servlet-api.jar nur zum Kompilieren und Testen zu verwenden, ihn jedoch NICHT in die WAR-Datei aufzunehmen. Der bereitgestellte Container stellt zur Laufzeit die Datei servlet-api.jar bereit.
quelle
Die folgende Windows-Befehlszeile ist möglicherweise hilfreich, um die fehlerhafte JAR-Datei aufzuspüren. Es wird ein Index aller Klassendateien in allen Gläsern im Ordner erstellt. Führen Sie die Ausführung im lib-Ordner Ihrer bereitgestellten App aus und durchsuchen Sie die Datei index.txt nach der fehlerhaften Klasse.
quelle
Maven-Abhängigkeitsbereich
quelle
Ich habe mit diesem Problem zu kämpfen und zahlreiche "Lösungen" ausprobiert.
Am Ende funktionierte jedoch nur Folgendes, und es dauerte tatsächlich einige Sekunden, um Folgendes zu tun: Löschen und Hinzufügen einer neuen Serverinstanz !
Grundsätzlich habe ich in Eclipse unter Server mit der rechten Maustaste auf meinen Tomcat-Server geklickt und ihn gelöscht. Als nächstes habe ich einen neuen Tomcat-Server hinzugefügt. Die Anwendung wurde bereinigt und erneut bereitgestellt, und ich habe diesen Fehler behoben.
quelle
Überprüfen Sie im folgenden Verzeichnis die JAR-Datei el-api.jar: C: \ apache-tomcat-7.0.39 \ lib \ el-api.jar, ob sie in diesem Verzeichnis Ihrer Webanwendung WEB-INF \ lib \ vorhanden ist el-api.jar das Glas sollte entfernt werden
quelle
Wenn Ihr URL-Muster falsch ist, kann dieser Fehler auftreten.
z.B. Wenn Sie @WebServlet ("login") geschrieben haben, wird dieser Fehler angezeigt. Das richtige ist @WebServlet ("/ login").
quelle
Ausschlüsse und
provided
Abhängigkeiten funktionieren in untergeordneten Projekten nicht.Wenn Sie die Vererbung in Maven-Projekten verwenden, müssen Sie diese Konfiguration in die übergeordnete
pom.xml
Datei aufnehmen. Sie haben einen<parent>...</parent>
Abschnitt in Ihrer pom.xml, wenn Sie die Vererbung verwenden . Sie haben also so etwas bei Ihren Elternpom.xml
:quelle
Die JAX-WS-Abhängigkeitsbibliothek "jaxws-rt.jar" fehlt.
Gehen Sie hier http://jax-ws.java.net/ . Laden Sie die JAX-WS RI-Distribution herunter. Entpacken Sie es und kopieren Sie "jaxws-rt.jar" in den Tomcat-Bibliotheksordner "{$ TOMCAT} / lib". Starten Sie Tomcat neu.
quelle
Wenn Sie diese Nachricht sehen, ist sie normalerweise harmlos. Wenn es heißt
Dies bedeutet, dass Ihr Servlet-api-2.5.jar ignoriert wird, da Tomcat bereits eine integrierte Version dieses JARs hat, sodass es Ihre nicht verwenden wird. In der Regel verursacht dies kein Problem.
Wenn es aber heißt
WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class
Dann wird ausgeführt, was Sie tun können (in meinem Fall handelt es sich um ein schattiertes Glas)
$ mvn Abhängigkeit: Baum
und entdecken Sie, dass Sie eine transitive Abhängigkeit von "etwas" haben, das von einem Glas abhängt, das entweder Servlet-API oder ähnliches ist (z
tomcat-servlet-api-9.0.0
. B. :) . Fügen Sie Ihrem Pom einen Ausschluss hinzu, z. B.: (In meinem Fall Kater, in Ihrem Fall wahrscheinlich die in den anderen Antworten genannten):quelle
Entfernen Sie
servlet.jar
von der Quelleweb-inf/lib
Ordner wie es in tomcat verfügbarlib
Ordner dann es funktioniert gutquelle