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

非Spring Boot项目用swagger-maven-plugin生成OpenAPI3.0异常咨询

问题场景

需要基于非Spring Boot的普通Spring应用源码,通过Maven插件在编译阶段生成OpenAPI 3.0规范的接口定义。
项目Controller类已经使用io.swagger.v3.oas.annotations包下的注解完成标注,示例代码如下:

package com.acme.rest;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Dummy Controller", description = "Dummy controller.")
@RestController
@RequestMapping("/api/v1/dummy")
public class DummyController {

    @Operation(summary = "dummy(). Does litrally nothing.")
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String doStuff() {
        return "dummy";
    }
}

使用官方swagger-maven-plugin做如下配置后,执行mvn clean compile仅生成了只包含OpenAPI版本号的空定义文件:

<plugin>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-maven-plugin</artifactId>
    <version>2.2.0</version>
    <configuration>
        <outputPath>${project.build.directory}/swagger-def</outputPath>
        <resourcePackages>com.acme</resourcePackages>
        <prettyPrint>true</prettyPrint>
    </configuration>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>resolve</goal>
            </goals>
        </execution>
    </executions>
</plugin>

生成的空文件内容如下:

{
  "openapi" : "3.0.1"
}

排查发现,该插件默认没有提供io.swagger.v3.oas.integration.api.OpenApiReader和io.swagger.v3.oas.integration.api.OpenApiScanner的实现类来扫描、解析相关注解,必须自定义这两个接口的实现类,再在插件中配置scannerClass、readerClass参数指定自定义实现,才能正常生成接口定义:

<scannerClass>com.acme.util.SwaggerOpenApiScanner</scannerClass>
<readerClass>com.acme.util.SwaggerOpenApiReader</readerClass>

核心疑问:

  • 注解与插件同属io.swagger.core.v3官方分组,为什么开箱即用状态下插件无法解析Swagger注解?
  • 是否遗漏了必要配置?
  • 有哪些可实现该需求的替代Maven插件?
原因说明

官方swagger-maven-plugin本身采用框架无关设计,核心只提供OpenAPI规范对象的序列化、输出基础能力,没有绑定任何特定Web框架的类扫描、注解解析逻辑。

  • 插件默认的内置扫描、读取实现仅能识别swagger-core原生标记的资源,无法识别Spring的@RestController、@RequestMapping等Spring Web专属注解,也不会自动将Spring MVC的接口映射规则转换为OpenAPI标准的路径、参数定义,因此只会输出最基础的版本号信息。
  • 不存在遗漏的核心配置项。swagger官方核心包刻意和具体Web框架解耦,避免给JAX-RS、Servlet等非Spring用户引入不必要的传递依赖,Spring生态的适配逻辑没有放在核心插件包中。若要继续使用该官方插件,除了自定义实现类外,也可以将io.swagger.core.v3:swagger-springweb适配包加入插件的运行时依赖,即可直接使用内置的Spring适配扫描、读取实现,无需自行编写实现类。
替代Maven插件推荐
  • springdoc-openapi-maven-plugin:内置Spring MVC全版本的注解解析逻辑,原生支持所有io.swagger.v3.oas.annotations包下的注解,不需要自定义Scanner、Reader实现,普通非Spring Boot的Spring MVC项目只要引入对应核心依赖,配置好扫描包路径、输出路径即可在编译期生成标准OpenAPI 3.0定义,配置成本极低,是当前Spring生态下最常用的方案。
  • smallrye-openapi-maven-plugin:Eclipse基金会旗下的OpenAPI实现插件,内置Spring MVC、JAX-RS等多框架的扫描适配能力,不需要额外编写自定义逻辑,编译期直接扫描源码注解生成规范文件,对非Spring Boot项目兼容性好,支持OpenAPI 3.0、3.1全版本规范。
  • openapi-generator-maven-plugin:除了根据OpenAPI定义生成接口、客户端代码的能力外,也支持从源码扫描生成OpenAPI规范,搭配Spring适配模块可直接识别Spring MVC Controller与swagger v3注解,生成的规范兼容性强,支持自定义规则扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:06:34