You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat启动失败:java.lang.NoClassDefFoundError问题求助

Tomcat启动失败:Log4j相关NoClassDefFoundError问题

启动Tomcat服务器时触发Log4jServletContextListener初始化事件失败,报错核心为java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/util/SetUtils,具体配置及完整日志如下:

1. Gradle依赖配置

dependencies{
...
    implementation 'org.apache.logging.log4j:log4j-core:2.12.2'
    implementation 'org.apache.logging.log4j:log4j-web:2.12.2'
...
}

2. web.xml配置

...
    <context-param>
        <param-name>isLog4jAutoInitializationDisabled</param-name>
        <param-value>true</param-value>
    </context-param>

    <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>
...

完整报错日志

12-Nov-2022 13:11:37.918 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath
12-Nov-2022 13:11:37.981 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.apache.logging.log4j.web.Log4jServletContextListener]
 java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/util/SetUtils
    at org.apache.logging.log4j.web.Log4jWebInitializerImpl.getConfigURI(Log4jWebInitializerImpl.java:196)
    at org.apache.logging.log4j.web.Log4jWebInitializerImpl.initializeNonJndi(Log4jWebInitializerImpl.java:175)
    at org.apache.logging.log4j.web.Log4jWebInitializerImpl.start(Log4jWebInitializerImpl.java:112)
    at org.apache.logging.log4j.web.Log4jServletContextListener.contextInitialized(Log4jServletContextListener.java:64)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4745)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.core.util.SetUtils
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    ... 17 more

解决方法

方法1:强制刷新依赖并检查打包完整性

  • 执行命令gradle clean build --refresh-dependencies,强制刷新依赖缓存并重新构建项目。
  • 解压构建后的WAR包,检查WEB-INF/lib目录下是否存在log4j-core-2.12.2.jar,若缺失需排查Gradle是否存在依赖排除或冲突规则。

方法2:排除Log4j版本冲突

若项目中第三方依赖引入了其他版本的Log4j,需统一版本并排除冲突:

dependencies{
...
    implementation 'org.apache.logging.log4j:log4j-core:2.12.2'
    implementation 'org.apache.logging.log4j:log4j-web:2.12.2'
    // 全局排除非指定版本的Log4j依赖
    configurations.all {
        exclude group: 'org.apache.logging.log4j', module: 'log4j-core', version: '!=2.12.2'
        exclude group: 'org.apache.logging.log4j', module: 'log4j-web', version: '!=2.12.2'
    }
...
}

方法3:调整依赖范围适配Tomcat类加载

将implementation替换为compileOnly+runtimeOnly,确保依赖被正确打包到WAR中:

dependencies{
...
    compileOnly 'org.apache.logging.log4j:log4j-core:2.12.2'
    runtimeOnly 'org.apache.logging.log4j:log4j-core:2.12.2'
    compileOnly 'org.apache.logging.log4j:log4j-web:2.12.2'
    runtimeOnly 'org.apache.logging.log4j:log4j-web:2.12.2'
...
}

方法4:升级Log4j版本(推荐)

2.12.2版本存在较多已知问题,建议升级到稳定版本(如2.17.1),同时修复类加载相关bug:

dependencies{
...
    implementation 'org.apache.logging.log4j:log4j-core:2.17.1'
    implementation 'org.apache.logging.log4j:log4j-web:2.17.1'
...
}

内容的提问来源于stack exchange,提问作者Kai-Eiji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:42:22