能否通过openapi-generator-maven-plugin生成OpenAPI YAML?求非Spring替代方案
关于从带注解源码生成OpenAPI YAML的方案解答
核心问题确认
openapi-generator-maven-plugin 确实不支持直接从带注解的源代码生成OpenAPI YAML。该插件的核心定位是基于已有的OpenAPI规范文件(通过input-spec指定)反向生成代码、客户端SDK或文档,从源码到规范的正向生成不在其功能覆盖范围内。
非Spring架构下的可行替代方案
1. JAX-RS + Swagger Core
如果你的项目基于JAX-RS规范(比如使用Jersey、RESTEasy等框架),Swagger Core可以直接扫描代码中的JAX-RS注解(@Path、@GET、@POST)和Swagger专属注解(@Api、@ApiOperation、@ApiParam)来生成OpenAPI规范。
- 操作步骤:
- 引入swagger-core、swagger-jaxrs相关依赖
- 编写一个简单的Java类,通过
Swagger类和APIReader扫描指定包下的API类,生成OpenAPI对象 - 使用
Yaml.mapper().writeValue()将OpenAPI对象序列化为YAML文件 - 可以通过
maven-exec-plugin在构建阶段调用这个类自动生成规范
2. 注解处理器(Annotation Processor)
利用Java注解处理器机制,在编译阶段扫描源码中的API注解,自动生成OpenAPI YAML:
- 可以自定义注解处理器,扫描项目中自定义的API注解或通用的OpenAPI注解(
@OpenAPIDefinition、@Operation),收集接口路径、参数、响应等元数据,构建OpenAPI模型后输出为YAML - 也可以使用现成的注解处理器库,配置后在编译阶段自动生成规范文件
3. 代码解析工具自定义生成
使用JavaParser等代码解析库编写脚本,直接扫描项目源码文件:
- 解析类、方法的定义和注解,手动提取API的路径、请求方法、参数类型、响应模型等信息
- 基于这些信息构建符合OpenAPI规范的Java对象,再序列化为YAML文件
- 这种方式灵活性极高,适合非标准API架构的项目,但需要自行实现扫描和模型构建逻辑
4. 运行时API录制生成
如果项目可以本地运行或已部署,通过API工具录制请求后生成规范:
- 使用Postman、Insomnia等工具发送所有API请求,录制请求详情
- 利用工具的导出功能,将录制的请求转换为OpenAPI YAML
- 注意:生成的规范可能缺少部分元数据(比如参数说明、响应模型的详细定义),需要手动补充完善
内容的提问来源于stack exchange,提问作者N4zroth
相关产品推荐
相关产品推荐

