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

如何在构建流程中生成Swagger的api-docs?

解决方案:离线生成Swagger/OpenAPI JSON并集成到Maven构建流程

方法一:基于Springfox实现离线生成

针对你当前使用的springfox-boot-starter 3.0.0,可以通过编写工具类+Maven插件的方式,在不启动服务器的情况下生成OpenAPI JSON。

步骤1:编写离线生成工具类

创建一个Java类,加载Spring上下文的核心部分,直接调用Springfox的API生成OpenAPI文档:

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.oas.web.OpenApiTransformationContext;
import springfox.documentation.oas.web.WebMvcOpenApiTransformationFilter;
import springfox.documentation.spring.web.plugins.Docket;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;

@Configuration
@ComponentScan(basePackages = "your.swagger.config.package") // 替换为你的Swagger配置所在包
public class OfflineOpenApiGenerator {
    public static void main(String[] args) throws IOException {
        try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(OfflineOpenApiGenerator.class)) {
            // 获取Swagger配置的Docket实例
            Docket docket = context.getBean(Docket.class);
            WebMvcOpenApiTransformationFilter filter = context.getBean(WebMvcOpenApiTransformationFilter.class);
            
            // 生成OpenAPI规范对象
            var openApi = filter.transform(
                new OpenApiTransformationContext<>(docket.getDocumentation(), null, null)
            ).getSpecification();
            
            // 将对象写入JSON文件到target目录
            ObjectMapper mapper = new ObjectMapper();
            mapper.writerWithDefaultPrettyPrinter()
                  .writeValue(new File("target/openapi.json"), openApi);
        }
    }
}

注意替换代码中的包路径为你项目实际的Swagger配置包(即定义Docket Bean的包)。

步骤2:配置Maven执行插件

在pom.xml中添加exec-maven-plugin,让它在构建的generate-sources阶段执行上面的工具类:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>generate-openapi-json</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>java</goal>
            </goals>
            <configuration>
                <mainClass>your.tool.class.package.OfflineOpenApiGenerator</mainClass> <!-- 替换为工具类全类名 -->
                <classpathScope>compile</classpathScope>
            </configuration>
        </execution>
    </executions>
</plugin>

步骤3:关联DTO生成插件

调整你已有的openapi-generator-maven-plugin配置,读取刚生成的target/openapi.json文件:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>6.6.0</version>
    <executions>
        <execution>
            <id>generate-dtos</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.build.directory}/openapi.json</inputSpec>
                <generatorName>java</generatorName>
                <outputDir>${project.build.directory}/generated-sources/openapi</outputDir>
                <packageName>your.dto.target.package</packageName>
                <configOptions>
                    <dateLibrary>java8</dateLibrary>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

执行mvn clean install时,会先生成OpenAPI JSON,再基于该文件生成DTO,全程无需启动服务器。

方法二:替换为SpringDoc OpenAPI(推荐)

Springfox已停止维护,SpringDoc是更活跃的替代方案,原生支持离线生成OpenAPI文档,配置更简洁。

步骤1:替换依赖

移除springfox-boot-starter,添加SpringDoc的依赖:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.2.0</version>
</dependency>

步骤2:配置SpringDoc Maven插件

在pom.xml中添加插件,直接在构建阶段生成OpenAPI JSON:

<plugin>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <id>generate-openapi</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <outputFileName>openapi.json</outputFileName>
        <outputDir>${project.build.directory}</outputDir>
        <springBootApplication>your.springboot.main.class</springBootApplication> <!-- 替换为Spring Boot主类全类名 -->
    </configuration>
</plugin>

该插件会加载Spring上下文但不启动服务器,直接生成规范文件。

步骤3:关联DTO生成插件

同方法一的第三步,让openapi-generator-maven-plugin读取target/openapi.json即可。

注意事项

  • 确保Swagger/SpringDoc的配置能扫描到所有API和DTO类,避免生成的文档不完整。
  • 若项目有多环境配置,需确保生成文档时使用的是通用配置(比如禁用生产环境的权限拦截器)。

内容的提问来源于stack exchange,提问作者Itai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:27:24