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

如何在Maven项目中动态传递父POM的version版本号

问题原因

Maven对<parent>标签内的版本号解析发生在构建生命周期的最早期阶段,此时普通的自定义系统属性、环境变量还未被加载到项目属性上下文,因此直接在<version>标签内使用${myversion}、${env.myversion}这类变量无法正常解析。

解决方案

方案1:使用Maven内置CI友好变量(推荐,适用于Maven 3.5.0及以上版本)

Maven 3.5.0之后专门提供了${revision}、${sha1}、${changelist}三个可提前解析的特殊变量,用于这类动态版本场景。

  • 调整parent标签写法:
<parent>
    <groupId>com.maventest</groupId>
    <artifactId>myproject</artifactId>
    <version>${revision}</version>
</parent>
  • 执行Maven命令时通过参数传入版本即可:
    mvn clean install -Drevision=1.0.0-SNAPSHOT

方案2:搭配flatten-maven-plugin使用自定义变量(适用于低版本Maven场景)

如果你的Maven版本低于3.5.0,可通过flatten插件在构建过程中替换变量:

  1. 在当前项目的pom.xml中添加插件配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>1.5.0</version>
            <executions>
                <execution>
                    <id>flatten</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>flatten</goal>
                    </goals>
                </execution>
                <execution>
                    <id>flatten.clean</id>
                    <phase>clean</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. parent标签内直接使用自定义变量:
<parent>
    <groupId>com.maventest</groupId>
    <artifactId>myproject</artifactId>
    <version>${myversion}</version>
</parent>
  1. 执行命令时传入参数即可:
    mvn clean install -Dmyversion=1.0.0-SNAPSHOT
注意事项

如果需要将当前项目打包上传到Maven私服/中央仓库,必须配置flatten插件,否则上传的pom文件会保留变量标识,其他项目依赖该组件时会出现版本解析失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:24:05