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

SpringBoot Jar转War部署WildFly时遇WebApplicationInitializer找不到问题

解决Spring Boot War部署到WildFly时org.springframework.web.WebApplicationInitializer找不到的问题

嘿,我来帮你搞定这个部署报错的问题!这个错误通常是因为Spring Web相关依赖没正确引入,或者War打包的配置有疏漏,咱们一步步来排查解决:

1. 检查主启动类是否正确继承SpringBootServletInitializer

Spring Boot的War包要部署到外部容器(比如WildFly),你的主启动类必须继承SpringBootServletInitializer并重写configure方法,这是让外部容器识别Spring应用的关键。修改后的Application.java应该是这样的:

package de.fred4jupiter.fredbet;

import de.fred4jupiter.fredbet.props.CacheNames;
import de.fred4jupiter.fredbet.props.FredbetProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

小提示:@SpringBootApplication已经包含了@EnableAutoConfiguration,所以可以不用单独声明后者,保留也不影响功能。

2. 调整依赖配置,排除嵌入式Tomcat并确保Spring Web依赖正确

Maven配置(pom.xml)

首先把打包方式改成war:

<packaging>war</packaging>

然后修改spring-boot-starter-web依赖,排除嵌入式Tomcat(避免和WildFly自带容器冲突),同时不要将Spring Web设为provided(否则WildFly会找不到相关类):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 可选:添加Servlet API依赖,scope设为provided,因为WildFly会提供该依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

Gradle配置(build.gradle)

如果用Gradle,修改如下:

plugins {
    id 'org.springframework.boot' version '你的Spring Boot版本号'
    id 'war'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // 排除嵌入式Tomcat
    implementation('org.springframework.boot:spring-boot-starter-tomcat') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    // 由WildFly提供的Servlet API,设为providedRuntime
    providedRuntime 'javax.servlet:javax.servlet-api:4.0.1'
}

3. 确认WildFly与Spring Boot版本兼容性

不同版本的WildFly对Spring Boot的支持有版本要求,比如:

  • WildFly 20+ 推荐搭配Spring Boot 2.4及以上版本
  • WildFly 17-19 适配Spring Boot 2.2-2.3版本
    版本不兼容也可能导致类加载异常,建议对照Spring官方文档确认匹配关系。

4. 重新打包并清理WildFly缓存

  • 先执行mvn clean package(Gradle用clean bootWar)重新生成War包,确保打包过程无报错。
  • 部署前清理WildFly的standalone/deployments目录下的旧文件,同时删除standalone/data和standalone/tmp里的缓存内容,避免旧文件干扰新部署。

按照这几步操作后,应该就能解决WebApplicationInitializer找不到的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:31:02