如何通过openapi-generator-maven-plugin动态设置OpenAPI规范版本
解决openapi-generator-maven-plugin生成yml缺少info节点并动态设置version的问题
方法1:直接通过插件configOptions配置info参数
这是最直接的方案,利用插件内置配置项直接生成带动态版本的info节点。在插件的<configuration>里添加<configOptions>,指定info相关字段,其中infoVersion直接引用Maven的${project.version}变量:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.6.0</version> <!-- 替换成你使用的插件版本 --> <executions> <execution> <id>generate-openapi-spec</id> <goals> <goal>generate</goal> </goals> <configuration> <generatorName>openapi-yaml</generatorName> <!-- 你的其他核心配置,比如java类路径、输出目录等 --> <configOptions> <infoTitle>你的API服务名称</infoTitle> <infoVersion>${project.version}</infoVersion> <infoDescription>API功能描述</infoDescription> <!-- 可选:添加联系人、许可证等其他info字段 --> <infoContactName>技术支持</infoContactName> <infoLicenseName>MIT</infoLicenseName> </configOptions> </configuration> </execution> </executions> </plugin>
配置完成后,生成的openapi.yml会自动包含完整的info节点,version值就是当前项目的Maven版本,无需手动修改。
方法2:自定义模板注入动态版本
如果某些生成器对configOptions的info参数支持有限,可以自定义模板实现:
- 从openapi-generator官方仓库找到对应生成器的默认模板(比如
openapi-yaml的模板文件),复制到项目的src/main/resources/openapi-templates目录下 - 修改模板中的info节点部分,将version设置为占位符
${infoVersion}:
info: title: ${infoTitle} version: ${infoVersion} description: ${infoDescription}
- 在插件配置中指定模板目录,并在configOptions里传入
infoVersion的值:
<configuration> <!-- 其他配置 --> <templateDirectory>${project.basedir}/src/main/resources/openapi-templates</templateDirectory> <configOptions> <infoVersion>${project.version}</infoVersion> <infoTitle>你的API服务名称</infoTitle> </configOptions> </configuration>
方法3:Maven资源过滤后处理
如果前两种方法都不适用,可用Maven资源插件在生成后替换版本占位符:
- 先通过插件生成包含占位符的
openapi.yml(比如手动在输入的Java注释或基础配置里添加info: { version: '@project.version@' }) - 配置
maven-resources-plugin对生成的文件进行过滤,替换占位符:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>filter-openapi-spec</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/final-spec</outputDirectory> <resources> <resource> <directory>${project.build.directory}/generated-spec</directory> <includes> <include>openapi.yml</include> </includes> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
优先推荐方法1,无需额外文件或后处理步骤,直接通过插件配置实现需求。
内容的提问来源于stack exchange,提问作者zolv
相关产品推荐
相关产品推荐

