Donnerstag, Mai 28, 2020

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)
InformationsquelleAutor Vinod | 2016-05-25

5 Kommentare

  1. 4

    Haben Sie eine benutzerdefinierte <Listener> in Ihrem server.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 und log4j-1.2.17.jar, aber die Fehlermeldung sagt, dass org.apache.logging.log4j.Logger fehlt.

    log4j-1.2.17.jar hat eine org.apache.log4j.Logger, so dass die falsche version von Log4j.

    log4j-web-2.3.jar enthält eine Log4jServletContainerInitializer im Paket org.apache.logging.log4j.web. Es wird automatisch geladen, indem Sie Tomcat, indem Sie einfach da. Dies ist die Klasse, muss org.apache.logging.log4j.Logger.

    org.apache.logging.log4j.Logger finden Sie in log4j-api-2.3.jar, so müssen Sie diese Datei, aber es ist nur die API. Sie müssen auch log4j-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 mit log4j-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 (ersetzt log4j-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).

    • Ich legte das log4j jar in „C:\XX\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\lib“ Verzeichnis und baute das Projekt immer noch dasselbe Problem aktualisiert, die Frage mit dem <Zuhörer> in server.xml
    • Das problem gelöst, danke. Wäre es möglich, einen überblick darüber, Wann und warum diese log4j Gläser werden verwendet?
  2. 2

    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.

  3. 0

    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.

    • Beachten Sie, dass die LifecycleListener ist fast sicher nicht geschrieben von der OP, als die einzige Veränderung, die Sie beschreiben, machen ist das hinzufügen einer Dritten Bibliothek. Die Bibliothek in Frage enthält ein LifecycleListener zum konfigurieren der Bibliothek und der Verwaltung Ihrer Ressourcen.
  4. 0

    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.

    • … NoClassDefFound fast immer ist verursacht durch die classpath-Probleme, d.h. eine Klasse erforderlich, die nicht vorhandenen in den classpath.

Kostenlose Online-Tests