Ich benutze Tomcat, um eine Java Webapp zu implementieren.java.lang.NoClassDefFoundError: Lorg/Apache/Protokollierung/log4j/Logger; aber das Artefakt existiert
ich eine sehr lange Stacktrace, kurz:
GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/new-webapp]]
[...]
Caused by: java.lang.NoClassDefFoundError: Lorg/apache/logging/log4j/Logger;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2509)
at java.lang.Class.getDeclaredFields(Class.java:1819)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:256)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationFilterAnnotations(WebAnnotationSet.java:105)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:64)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:335)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:782)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:306)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:95)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5150)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1139)
... 20 more
[...]
Nun wird der Fehler ist ziemlich klar. Aus irgendeinem Grund befindet sich das Paket log4j nicht im Klassenpfad.
Die Anwendung ist ein Maven Webapp, und die pom.xml ist wie folgt:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wb</groupId>
<artifactId>new-webapp</artifactId>
<packaging>war</packaging>
<version>0.0.1</version>
<properties>
<log4j.version>2.5</log4j.version>
</properties>
<dependencies>
[...]
<!-- Logging -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
[...]
</project>
Wenn ich zu den Projekteigenschaften gehen, unter Libraries> Maven Abhängigkeiten Ich sehe diese:
Bibliotheken wurden gefunden, heruntergeladen und befinden sich im Klassenpfad.
Ich habe versucht, eine Java-Klasse in meinem Projekt zu öffnen und
org.apache.logging.log4j.Logger Logger;
Keine Fehler erklären, die Logger
Schnittstelle gefunden wird.
Was geht hier vor? Warum kann Tomcat nicht gestartet werden, obwohl sich Bibliotheken im Klassenpfad befinden? -
bearbeiten Sie die Datei log4j Konfiguration ist:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
Ich kann das Bild nicht sehen, aber das ist Eclipse richtig? Werden Sie in der IDE oder in einem externen Tomcat bereitgestellt? Wenn Sie in der IDE sind, stellen Sie sicher, dass Sie sowohl den Server als auch das Projekt und alle temporären Dateien säubern. Stellen Sie außerdem sicher, dass Sie ein aktuelles m2e und m2e-wtp verwenden. Sind die Bibliotheken in 'WEB-INF/lib' vorhanden, wenn Sie den Krieg mit' mvn clean package' verpacken? – Tunaki
@Tunaki Ich bin innerhalb von Eclipse bereitstellen, und ich habe bereits versucht, sowohl Tomcat, Project und Tomcat Arbeitsverzeichnis zu reinigen. Wenn ich unter wtpwebapps im Eclipse Server Pfad gehe, kann ich unter WEB-INF/lib drei jog4j jars sehen. – BackSlash
Bitte überprüfen Sie dies, ich sehe, es gibt viel mehr Schritte, die bei der Verwendung von log4j mit tomcat8 https://tomcat.apache.org/tomcat-8.0-doc/logging.html – piyushj