Spring Boot 2.4.1未指定Jetty依赖却尝试初始化Jetty服务器报错如何解决
问题触发原因
- 类路径存在不完整Jetty依赖:Spring Boot 中 Jetty 相关定制器的自动配置触发条件为类路径存在
org.eclipse.jetty.server.Server类,若第三方依赖传递引入了部分 Jetty 组件但未引入完整依赖栈,会触发自动配置逻辑,初始化jettyWebServerFactoryCustomizer时缺少必要类抛出异常。 - Spring Boot 依赖版本不一致:当前配置中
spring-boot-starter-actuator显式指定了版本,若该版本和项目父pom声明的Spring Boot 主版本不匹配,会导致自动配置逻辑异常,错误加载Jetty相关Bean。 - 显式指定了Jetty服务器类型:若项目配置文件中设置了
server.type=jetty等指定使用Jetty的配置,也会触发Jetty相关Bean的加载流程。
解决方案
- 排查并排除不完整Jetty依赖:执行
mvn dependency:tree命令搜索Jetty相关依赖,找到传递引入Jetty的第三方依赖后,添加排除规则:
<dependency> <groupId>第三方依赖groupId</groupId> <artifactId>第三方依赖artifactId</artifactId> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
- 统一Spring Boot依赖版本:移除
spring-boot-starter-actuator的显式version配置,所有Starter版本由父pom统一管理,避免版本冲突导致的自动配置异常。 - 强制指定使用Tomcat服务器:可以通过配置显式禁用Jetty自动配置或指定服务器类型:
- 配置文件添加配置:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$JettyWebServerFactoryCustomizerConfiguration server.type=tomcat- 也可以在pom中显式引入Tomcat Starter确保优先级:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency>
内容的提问来源于stack exchange,提问作者Akhil
相关产品推荐
相关产品推荐

