it-swarm.com.ru

java.lang.NoClassDefFoundError: Lorg/Apache/logging/log4j/Logger; но артефакт существует

Я использую Tomcat для развертывания веб-приложения Java.

Я получаю очень длинную трассировку стека, короче:

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
[...]

Теперь ошибка довольно очевидна. По некоторым причинам, пакет log4j не находится в пути к классам.

Приложение представляет собой веб-приложение maven, а файл pom.xml выглядит так:

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

Если я перейду к свойствам проекта, в разделе Библиотеки-> Зависимости Maven я увижу это:

 enter image description here

Библиотеки были найдены, загружены и находятся в пути к классам.

Я также попытался открыть класс Java внутри моего проекта и объявить

org.Apache.logging.log4j.Logger Logger;

Нет ошибок, интерфейс Logger не найден.

Что тут происходит? Почему Tomcat не запускается, даже если библиотеки находятся в пути к классам?


Редактировать - это файл конфигурации log4j:

<?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>
5
BackSlash

По описанию, которое вы сделали, я предполагаю, что вы работаете с Eclipse.

Что ж, вам лучше перейти на Project properties -> Deployment Assembly и убедиться, что запись maven dependencies включена.

Я часто экспериментировал, что эта конфигурация пропускается всякий раз, когда вы выполняете Maven -> Update Project.

8
Little Santi

Я работаю с Eclipse, и у меня возникала одна и та же проблема каждый раз, когда я вносил изменения в свой pom.xml. Я не знаю почему, но Eclipse удаляет Maven Dependencies.

Решение: щелкните правой кнопкой мыши на project , выберите Properties , выберите Deployment Assembly и проверьте в столбце «Source» строку с именем «Maven Dependencies». Если его там нет, нажмите Добавить ... , Записи пути сборки Java и нажмите Зависимости Maven . Наконец Применить и закрыть .

2
Ucha

Убедитесь, что библиотеки log4j еще не включены в среду выполнения Tomcat (или в утвержденные каталоги), поскольку это может привести к конфликту в отношении политики загрузки классов.

0
Little Santi