类路径检测到2个Spring WebApplicationInitializers的启动问题求助
Spring Boot + Jetty + JSP 启动问题排查方案
问题现象
- 启动时刷出大量JSTL类从多路径扫描的警告
- 提示检测到2个
Spring WebApplicationInitializers - 最终启动失败,抛出
AbstractMethodError - 伴随端口占用提示
分步解决
1. 解决JSTL重复扫描警告
- 检查
pom.xml中的JSTL依赖,只保留一套有效依赖,删除重复或冲突的包(比如同时引入jstl-api和jstl-impl但未做依赖排除):<!-- 标准JSTL依赖配置,排除冲突的servlet/jsp api --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jstl-impl</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> </exclusion> </exclusions> </dependency> - 添加Spring Web配置类,指定JSTL视图类,避免重复扫描:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); return resolver; } }
2. 解决WebApplicationInitializers冲突
- 检查
pom.xml,若同时引入spring-boot-starter-web和spring-boot-starter-jetty,必须排除web starter中的Tomcat依赖:<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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> - 执行
mvn dependency:tree生成依赖树,查找第三方依赖中是否自带WebApplicationInitializer实现,找到后排除对应依赖包。
3. 修复AbstractMethodError
- 该错误多由依赖版本不兼容导致,重点验证版本匹配:
- Spring Boot 2.x对应Jetty 9.x/10.x,避免跨大版本混用
javax.servlet-api版本需与Jetty兼容,Spring Boot 2.x建议使用4.0.1版本
- 清理本地仓库脏依赖:
mvn clean dependency:purge-local-repository,重新下载正确版本依赖。
4. 解决端口占用
- 查找占用目标端口的进程:
# Windows系统 netstat -ano | findstr :<你的端口号> # Linux/Mac系统 lsof -i :<你的端口号> - 杀掉对应进程后重新启动,或修改配置更换端口:
# application.properties server.port=8081
验证步骤
- 执行
mvn dependency:tree,搜索jstl、jetty、spring-web相关依赖,确认无重复或版本冲突 - 执行
mvn clean清理编译文件,再用mvn spring-boot:run重新启动应用
内容的提问来源于stack exchange,提问作者htk
相关产品推荐
相关产品推荐

