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

Wildfly 34无法加载依赖JAR中带@WebServlet注解的Servlet问题咨询

问题原因及解决方案

核心原因

Jakarta EE 10 对应的 Servlet 6.0 规范变更了默认注解扫描行为:WEB-INF/lib 下的依赖 JAR 包默认不再自动扫描@WebServlet、@WebFilter等Servlet相关注解。而 Java EE 8(Servlet 4.0)及更早版本中,容器默认会扫描这些JAR中的注解,这就是Wildfly 26能加载、Wildfly 34不能加载的根本原因。

解决办法

方法1:通过web.xml配置扫描指定JAR或所有JAR

在项目的web.xml中添加<jar-scanning>配置,明确指定要扫描注解的JAR包,或者直接扫描所有WEB-INF/lib下的JAR:

扫描所有WEB-INF/lib中的JAR

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0"
         metadata-complete="false">

    <jar-scanning>
        <scan-all/>
    </jar-scanning>

</web-app>

扫描特定JAR包

如果只需要扫描某个依赖JAR,可指定JAR文件名:

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0"
         metadata-complete="false">

    <jar-scanning>
        <scan>your-dependency.jar</scan>
    </jar-scanning>

</web-app>

方法2:保留web-fragment.xml显式声明

你当前使用的在web-fragment.xml中显式声明Servlet的方式完全有效,这也是Servlet规范允许的方式,适合需要精确控制Servlet加载的场景。

注意事项

  • 确保web.xml的metadata-complete属性设置为false,否则容器会忽略所有注解,只读取web.xml和web-fragment.xml中的配置。
  • Wildfly 34严格遵循Jakarta EE 10规范,所有配置需符合Servlet 6.0的schema要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:01:01