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

在WildFly 26中加载Jar内Servlet过滤器时出现NoClassDefFoundError

问题分析与解决

问题根源

你看到的NoClassDefFoundError并不是找不到你的LoggingFilter类,而是**LoggingFilter加载时无法找到它依赖的jakarta.servlet.Filter接口**。这是因为WildFly的WAR类加载器未正确关联到Jakarta Servlet API模块,或者你的Filter项目依赖配置存在问题。

解决方法

1. 修正Filter项目的依赖范围

确保你的servlet-logging-filter项目中,Jakarta Servlet API依赖的范围设置为provided(由服务器提供该依赖,无需打包到jar中):
以Maven为例,修改pom.xml:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version> <!-- WildFly 26对应Servlet API 5.0版本 -->
    <scope>provided</scope>
</dependency>

重新打包servlet-logging-filter-1.0.0.jar,替换WAR包WEB-INF/lib下的旧jar文件。

2. 显式声明WildFly模块依赖

如果步骤1无法解决问题,在你的WAR包的WEB-INF目录下创建jboss-deployment-structure.xml文件,强制引入Jakarta Servlet API模块:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <!-- 引入WildFly内置的Jakarta Servlet API模块 -->
            <module name="jakarta.servlet.api" export="true"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

重新打包WAR和EAR后,再部署到WildFly。

3. 验证兼容性

确认你使用的WildFly 26是Jakarta EE 9.1兼容版本(默认即为该版本),它提供的Jakarta Servlet 5.0 API与你的Filter依赖的jakarta.servlet.Filter完全匹配。

额外检查项

  • 确认servlet-logging-filter-1.0.0.jar中未包含jakarta.servlet.*相关类,避免与服务器提供的API冲突。
  • 确认WAR包的WEB-INF/lib目录下仅存在你的Filter jar,无其他Servlet API相关的jar文件。

内容的提问来源于stack exchange,提问作者user1938742

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:45:12