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
相关产品推荐
相关产品推荐

