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

如何在OpenAPI规范中为info.version设占位符并通过Maven构建替换?

实现OpenAPI YAML版本与Maven构件版本同步

完全可以做到,下面是两种常用的实现方式:

方法一:Maven资源过滤(简单直接)

这是最通用的方案,适合仅需替换YAML中版本号的场景:

  • 在openapi.yaml中把info.version设为Maven占位符:
    info:
      title: Your API Title
      version: '@project.version@'
    
  • 在pom.xml中配置资源过滤,指定openapi.yaml所在目录开启变量替换:
    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
          <includes>
            <include>openapi.yaml</include>
          </includes>
        </resource>
      </resources>
    </build>
    
  • 执行mvn clean package,Maven会自动将@project.version@替换为当前构件的版本号。

方法二:OpenAPI Generator Maven插件适配(代码生成场景)

如果你的项目需要基于OpenAPI文件生成API代码,可以直接通过插件完成版本替换:

  • 在openapi.yaml中使用${project.version}作为占位符:
    info:
      title: Your API Title
      version: '${project.version}'
    
  • 在pom.xml的插件配置中开启文件后处理,确保占位符被替换:
    <plugin>
      <groupId>org.openapitools</groupId>
      <artifactId>openapi-generator-maven-plugin</artifactId>
      <version>6.6.0</version>
      <executions>
        <execution>
          <goals>
            <goal>generate</goal>
          </goals>
          <configuration>
            <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec>
            <enablePostProcessFile>true</enablePostProcessFile>
            <configOptions>
              <version>${project.version}</version>
            </configOptions>
          </configuration>
        </execution>
      </executions>
    </plugin>
    
  • 执行构建命令时,插件会自动替换YAML中的版本占位符,同时生成对应版本的API代码。

注意事项

  • 占位符格式需与Maven的资源过滤规则匹配,默认是@...@,若修改了pom中的delimiters参数需同步调整占位符格式
  • 若openapi.yaml不在src/main/resources目录下,需对应修改resource节点的directory路径
  • 确保构建时触发资源过滤阶段,mvn clean package或mvn clean install都会自动执行该步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:02