springboot 启动项目报错: Caused by: java.lang.ClassNotFoundException: javax.servlet

771 阅读1分钟

springboot 整合 knife4j 的时候,启动报错 Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter。

版本信息:
    springboot:3.2.4
    jdk:17
    knife4j:4.5.0

发现项目依赖存在问题:

<!-- knife4j依赖-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
    <version>4.5.0</version>
</dependency>

后来发现得用 knife4j-openapi3-jakarta-spring-boot-starter 依赖,才可以:

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.5.0</version>
</dependency>

更换依赖后,就可以了。

一、这两个依赖的区别

knife4j-openapi3-jakarta-spring-boot-starter和knife4j-openapi3-spring-boot-starter是Knife4j的两个不同版本的OpenAPI 3.0的Spring Boot启动器。

knife4j-openapi3-spring-boot-starter是针对使用Spring Boot 2.x的版本。

knife4j-openapi3-jakarta-spring-boot-starter是针对使用Spring Boot 3.x及以上版本,也就是基于Jakarta EE的版本。

二、springboot3.x 更换了 Jakarta EE

sprignboot3.x 弃用了 javae EE 改用 Jakarta EE,而 Jakarta EE 并没有 javax.servlet.Filter 包,这就导致我在 springboot3 项目中导入 knife4j-openapi3-spring-boot-starter 依赖后启动,报错缺少 javax.servlet.Filter 。