Spring Boot+Java17环境下Openapi Generator Maven Plugin配置求助
Spring Boot 3 + Java 17 适配 OpenAPI Generator Maven Plugin 配置方案
问题根源
你遇到的package javax.servlet.http does not exist错误,核心原因是:
- Spring Boot 3 基于 Jakarta EE 9+,所有
javax.*包已迁移到jakarta.* - 你使用的
openapi-generator-maven-plugin 5.1.0版本过旧,默认生成的代码仍依赖旧的javax.servlet包,和Spring Boot 3的Jakarta体系不兼容 - POM中还包含了不兼容Spring Boot 3的依赖(比如
springfox-swagger2 2.9.2、旧版javax.validation)
修正后的完整POM配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> <openapi-generator.version>6.6.0</openapi-generator.version> <springdoc.version>2.2.0</springdoc.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- OpenAPI 必备依赖 --> <dependency> <groupId>org.openapitools</groupId> <artifactId>jackson-databind-nullable</artifactId> <version>0.2.1</version> </dependency> <!-- 替换SpringFox,用SpringDoc适配Spring Boot 3 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>${springdoc.version}</version> </dependency> <!-- Jakarta 验证API,替代旧版javax.validation --> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> </dependency> <!-- Jakarta 注解API --> <dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>${openapi-generator.version}</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/petstore.yaml</inputSpec> <generatorName>spring</generatorName> <apiPackage>com.example.demo.api</apiPackage> <modelPackage>com.example.demo.model</modelPackage> <supportingFilesToGenerate> ApiUtil.java </supportingFilesToGenerate> <configOptions> <!-- 适配Spring Boot 3版本 --> <springBootVersion>3.0.6</springBootVersion> <!-- 启用Jakarta EE替代旧Java EE包 --> <useJakartaEe>true</useJakartaEe> <!-- 启用委托模式,方便自定义业务逻辑 --> <delegatePattern>true</delegatePattern> <!-- 生成完整控制器类而非仅接口(可根据需求调整) --> <interfaceOnly>false</interfaceOnly> </configOptions> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
关键修改说明
- 升级插件版本:使用
6.6.0版本的openapi-generator,该版本完全支持Jakarta EE和Spring Boot 3 - 添加Jakarta配置:在
configOptions中设置<useJakartaEe>true</useJakartaEe>,让插件生成jakarta.servlet相关代码,替代旧的javax包 - 替换过时依赖:
- 移除不兼容的
springfox-swagger2,换成springdoc-openapi-starter-webmvc-ui(Spring官方推荐的OpenAPI适配库,完美支持Spring Boot 3) - 将
javax.validation:validation-api替换为jakarta.validation:jakarta.validation-api,与Spring Boot 3的依赖体系对齐
- 移除不兼容的
- 优化路径配置:用
${project.basedir}替代绝对路径,保证项目可移植性
内容的提问来源于stack exchange,提问作者catch22
相关产品推荐
相关产品推荐

