You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:52