Kann nicht zum starten von tomcat 7: Verursacht durch: java.lang.NoClassDefFoundError
Mein web-Projekt war zum laufen gut, bis gestern jedoch als ich heute startet mein tomcat server 7 es lässt sich nicht starten mit folgende Fehlermeldung in eclipse:
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CiscoQA_Automation_Framework]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 7 more
Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:192)
at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:157)
at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1577)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:889)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5419)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1722)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1573)
... 19 more
Nachdem er hier und paar andere links habe ich gereinigt WEB-INF/lib und classpath, und fügte dann hinzu "log4j-web-2.3.jar" und "log4j-1.2.17.jar" in WEB-INF/lib und die Klasse Weg. Ich habe versucht, die Reinigung der Projekt-und tomcat-Arbeitsverzeichnis auch nichts gearbeitet.
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener"/>
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
- Ich habe versucht, mit "logback-classic-1.0.13.jar" und "logback-core-1.0.13.jar" Gläser als gut, aber das Problem nicht beheben
- sind u mit eclipse JUNO?
- Nein, die Version: Mars-Version (4.5.0)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine benutzerdefinierte
<Listener>
in Ihremserver.xml
, die auf eine Klasse, die eine statische Abhängigkeit zu Log4j, und Sie nicht hinzufügen, das Log4j-jar-Datei Kater classpath, d.h. die$TOMCAT_HOME/lib
(oder$TOMCAT_BASE/lib
) Ordner.Entfernen Sie entweder den Hörer oder fügen Sie die fehlenden jar-Datei.
Update
Sagen Sie, Sie Hinzugefügt
log4j-web-2.3.jar
undlog4j-1.2.17.jar
, aber die Fehlermeldung sagt, dassorg.apache.logging.log4j.Logger
fehlt.log4j-1.2.17.jar
hat eineorg.apache.log4j.Logger
, so dass die falsche version von Log4j.log4j-web-2.3.jar
enthält eineLog4jServletContainerInitializer
im Paketorg.apache.logging.log4j.web
. Es wird automatisch geladen, indem Sie Tomcat, indem Sie einfach da. Dies ist die Klasse, mussorg.apache.logging.log4j.Logger
.org.apache.logging.log4j.Logger
finden Sie inlog4j-api-2.3.jar
, so müssen Sie diese Datei, aber es ist nur die API. Sie müssen auchlog4j-core-2.3.jar
- das eigentliche Log4J-2-Implementierung.Wenn Sie keinen code verwenden Sie die Log4j-1 API, entfernen
log4j-1.2.17.jar
. Wenn Sie code unter Verwendung der alten API, ersetzen Sie diese Datei mitlog4j-1.2-api-2.3.jar
, die leitet der alte API-Aufrufe auf die neue API. Dies beseitigt die Notwendigkeit für die Konfiguration von beiden, und eine einzelne log-Datei unabhängig von der API-version verwendet.Zusammenfassung: benötigen Sie die folgenden Dateien:
log4j-api-2.3.jar
log4j-core-2.3.jar
log4j-web-2.3.jar
log4j-1.2-api-2.3.jar
(ersetztlog4j-1.2.17.jar
nur hinzufügen, wenn erforderlich, durch alten code)Während Sie dabei sind, ein upgrade auf die neueste version (2.5).
Manchmal kann dies passieren, wenn es mehrere log4j-Versionen in Ihrem Krieg und Konflikt. Wenn dies ein maven-build verwenden mvn dependendency:Baum, um sicherzustellen, dass Sie nicht transitiv ziehen in mehreren Versionen von log4j. Ich würde anfangen mit der Suche in $TOMCAT_HOME/webapps/{your_app_name_goes_here}/WEB-INF/lib-Verzeichnis. Ich würde vermuten, dass der Grund, es funktioniert heute nicht mehr ist, weil die Klasse loader entschieden, laden Sie eine andere version von log4j heute erste.
Gibt es ein problem mit der LifecycleListener-Schnittstelle in Ihrem Programm. Oft ist es besonders schwierig, zu verstehen, die Ursache der LifecycleListener Probleme, da im Allgemeinen gibt es zahlreiche Abhängigkeiten. Meine Empfehlung wäre Schrott, den Inhalt der Datei mit Ihren LifecycleListener und stellen Sie sicher, entfernen Sie alle Anstände, die möglicherweise auf ihn verlassen. Rekonstruieren Sie dann von Anfang an.
Dies ist vielleicht nicht der Schnellste Weg zur Behebung der Fehler, aber es ist sehr wahrscheinlich die effektivste, und die meisten wahrscheinlich um zu verhindern, dass weitere Fehler in der Zukunft.
NoClassDefFound error ist in der Regel nicht im Zusammenhang mit classpath-Probleme fokussieren, es ist zwecklos. Ich empfehle bereitstellen ur-Webanwendung in tomcat mit default Einstellungen und dann auf Anpassungen und eins nach dem anderen, das problem zu finden.
Versuchen Sie, hinzufügen:
org.slf4j slf4j-api 1.7.21