Maven多模块项目中如何导入另一模块OpenAPI生成的类?
问题解决:Maven Install时找不到OpenAPI生成的类
核心原因
问题出在OpenAPI生成代码的时机晚于Maven编译阶段,导致第一个模块执行install时,生成的类还没被编译打包进Jar,第二个模块依赖时自然找不到这些类。而Spring Boot运行正常是因为spring-boot-maven-plugin在启动流程中会额外触发代码生成动作,弥补了这个顺序问题。
解决方案
方案1:绑定插件到正确的生命周期阶段
修改第一个模块(api-generation)的OpenAPI插件配置,添加<phase>generate-sources</phase>,让代码生成在Maven编译(compile)阶段之前执行:
<plugins> <plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.4.0</version> <executions> <execution> <id>spring-boot-api</id> <phase>generate-sources</phase> <!-- 新增这一行,指定执行阶段 --> <goals> <goal>generate</goal> </goals> <configuration> <!-- 原有配置保持不变 --> <inputSpec>${project.basedir}/src/main/resources/static/api-docs.yaml</inputSpec> <generatorName>spring</generatorName> <configOptions> <dateLibrary>joda</dateLibrary> <useSpringController>true</useSpringController> <interfaceOnly>true</interfaceOnly> <sourceFolder>src/main/java</sourceFolder> </configOptions> <library>spring-boot</library> <apiPackage>com.api.generation</apiPackage> <modelPackage>com.api.generation.model</modelPackage> <invokerPackage>com.api.generation.handler</invokerPackage> </configuration> </execution> </executions> </plugin> </plugins>
方案2:优化代码生成目录(推荐)
不建议将生成代码写入src/main/java(会污染源码目录),改为写入target下的生成目录,并配置Maven编译插件包含该目录:
<plugins> <!-- OpenAPI插件配置 --> <plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.4.0</version> <executions> <execution> <id>spring-boot-api</id> <phase>generate-sources</phase> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/static/api-docs.yaml</inputSpec> <generatorName>spring</generatorName> <configOptions> <dateLibrary>joda</dateLibrary> <useSpringController>true</useSpringController> <interfaceOnly>true</interfaceOnly> <sourceFolder>target/generated-sources/openapi</sourceFolder> <!-- 修改生成目录 --> </configOptions> <library>spring-boot</library> <apiPackage>com.api.generation</apiPackage> <modelPackage>com.api.generation.model</modelPackage> <invokerPackage>com.api.generation.handler</invokerPackage> </configuration> </execution> </executions> </plugin> <!-- 配置编译插件包含生成的源码目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <!-- 使用与Spring Boot 2.7.5兼容的版本 --> <configuration> <source>1.8</source> <!-- 根据你的JDK版本调整 --> <target>1.8</target> <compileSourceRoots> <compileSourceRoot>${project.basedir}/src/main/java</compileSourceRoot> <compileSourceRoot>${project.build.directory}/generated-sources/openapi</compileSourceRoot> </compileSourceRoots> </configuration> </plugin> </plugins>
验证操作
执行以下命令测试修复效果:
mvn clean install
内容的提问来源于stack exchange,提问作者Leobejj
相关产品推荐
相关产品推荐

