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

WildFly 11部署WAR包遇WeldStartService启动失败求助

解决WildFly 11部署WAR时WeldStartService启动失败的问题

嘿,我看了你的问题和POM配置,确实是依赖配置出了问题——WildFly 11作为Java EE 7兼容的应用服务器,自带了大部分Java EE规范的实现,你手动添加的几个依赖要么版本不兼容,要么完全冗余,直接导致了Weld(CDI容器)启动失败。具体问题和修复方案如下:

核心问题分析

  • Java EE API版本不兼容:你使用的javaee-web-api:8.0对应Java EE 8规范,但WildFly 11仅支持Java EE 7,过高的API版本会和服务器内置类库直接冲突,必须降级到匹配的版本。
  • 冗余的Weld依赖:WildFly本身已经内置了Weld(CDI的官方参考实现),手动引入的weld-servlet:2.4.5.Final完全多余,且版本与服务器内置Weld不匹配,这是WeldStartService启动失败的核心原因。
  • Servlet API版本冲突:javax.servlet-api:4.0.0是Servlet 4.0规范(对应Java EE 8),但WildFly 11使用的是Servlet 3.1,且服务器已经提供了Servlet API实现,这个依赖要么冗余要么版本不匹配。
  • 老旧冗余的EL依赖:com.sun.el:el-ri:1.0是非常老旧的EL表达式实现,WildFly自带了符合Java EE规范的EL容器,这个依赖只会引发类库冲突。
  • JSF版本适配问题:你用的javax.faces:2.3.3是JSF 2.3版本,而WildFly 11默认内置JSF 2.2,若不需要2.3特性,建议适配服务器内置版本;若必须用2.3,需额外配置WildFly。

修正后的POM依赖示例

<dependencies>
    <!-- JSF依赖:若不需要2.3特性,建议替换为WildFly内置的2.2.x版本(如2.2.14.SP1)并保持provided scope -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.3.3</version>
        <!-- 若要使用外部JSF 2.3,需去掉provided并配置WildFly服务器,否则保持provided -->
        <scope>provided</scope>
    </dependency>
    <!-- Java EE 7 Web API,匹配WildFly 11的规范版本 -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- 通用日志依赖,无冲突可保留 -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- JSTL依赖,服务器通常不自带完整实现,可保留 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- 测试依赖,仅在测试阶段生效,可保留 -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>catalina</artifactId>
        <version>6.0.53</version>
        <scope>test</scope>
    </dependency>
</dependencies>

额外配置(若需使用JSF 2.3)

如果确实需要JSF 2.3的特性,除了保留上述依赖外,还需修改WildFly配置:

  1. 下载JSF 2.3的模块包,替换WildFly目录modules/system/layers/base/com/sun/jsf-impl/main下的原有文件;
  2. 修改standalone.xml中的JSF子系统配置,将default-jsf-impl-slot设置为2.3(对应你放置的模块版本)。

调整完依赖后,重新打包WAR包部署到WildFly 11,应该就能解决WeldStartService启动失败的问题了。核心原则是尽量复用应用服务器内置的Java EE类库,避免手动引入服务器已提供的依赖,确保依赖版本与服务器支持的规范版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:31