2016-09-22 2 views
2

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:

enter image description here

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> 
+0

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

+0

@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

+0

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

Antwort

4

Durch die Beschreibung, die Sie gemacht haben, ich nehme an, Sie mit Eclipse arbeiten.

Nun, gehen Sie besser zu Project properties ->Deployment assembly und stellen Sie sicher, dass der maven dependencies Eintrag enthalten ist.

Ich habe oft experimentiert, dass diese Konfiguration verpasst wird, wenn Sie Maven ->Update Project ausführen.

+0

Ja, es ist mir auch schon passiert, aber das ist nicht der Fall , Maven Dependencies gibt es, mit 'WEB-INF/lib' als Deploy Path – BackSlash

+0

@BackSlash Und log4j ist in diesem' Maven Dependencies' Eintrag enthalten, sicher? –

+1

Ja, wie das Bild zeigt.Außerdem gibt es noch andere Konfigurationen die log4j, die alle aus Bibliotheken kommen, die mit Maven geladen sind, geben keine Fehler, Log4j tut das. Ziemlich komisch. – BackSlash

0

Stellen Sie sicher, dass die log4j-Bibliotheken nicht bereits in der Tomcat-Laufzeitumgebung (noch in den unterstützten Verzeichnissen) enthalten sind, da dies zu Konflikten über die Klassenlade-Richtlinie führen könnte.

+0

Tomcat ist eine neue Installation, Version 8.0.37 gestern von der Apache-Site heruntergeladen . Dies sind die Bibliotheken: http://i.stack.imgur.com/nr2F2.png – BackSlash

Verwandte Themen