Spring多模块项目中无法导入并实现OpenAPI生成接口的求助
问题解决步骤
一、统一Java编译版本
父项目指定了Java 17,但customy-api和customy-service模块仍使用Java 1.7,跨版本编译会导致类无法互相识别。修改两个模块的<properties>配置:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
二、让Maven识别OpenAPI生成的代码
OpenAPI生成的代码默认存放在${project.build.directory}/generated-sources/,Maven不会自动将该目录纳入编译范围,需在customy-api模块的<build><plugins>中添加插件:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/generated-sources/src/main/java</source> </sources> </configuration> </execution> </executions> </plugin>
三、替换javax依赖为Jakarta兼容版本
Spring Boot 3基于Jakarta EE,customy-api中的javax依赖会与Spring Boot 3冲突,做如下替换:
- 移除
javax.validation:validation-api,改用Spring Boot提供的starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <scope>provided</scope> </dependency>
- 移除
javax.annotation:javax.annotation-api(Spring Boot 3已内置相关API) - 移除
javax.servlet:servlet-api,替换为Jakarta版本:
<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>
- 移除
io.springfox:springfox-swagger2(Spring Boot 3推荐使用springdoc-openapi,仅生成接口可直接移除)
四、升级OpenAPI Generator插件版本
旧版本(5.1.0)对Spring Boot 3支持不足,升级至稳定版并适配Spring Boot 3配置:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.6.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/api/customy.yaml</inputSpec> <generatorName>spring</generatorName> <output>${project.build.directory}/generated-sources/</output> <apiPackage>sio.myproject.api</apiPackage> <modelPackage>sio.myproject.models</modelPackage> <configOptions> <interfaceOnly>true</interfaceOnly> <springBootVersion>3.1.2</springBootVersion> <jakartaEe>true</jakartaEe> <useSpringBoot3>true</useSpringBoot3> </configOptions> </configuration> </execution> </executions> </plugin>
五、重新构建项目
执行Maven命令清理并重新编译所有模块:
mvn clean install -DskipTests
内容的提问来源于stack exchange,提问作者rachid si oumghar
相关产品推荐
相关产品推荐

