前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maven如何动态统一修改版本号

maven如何动态统一修改版本号

作者头像
lyb-geek
发布2022-01-06 16:45:45
7350
发布2022-01-06 16:45:45
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

01前言

最近业务开发部门因为开发环境和测试环境共用一个maven私仓,导致他们开发环境的API包和测试环境的API包发生了覆盖现象。于是他们向我们部门提出一个需求,希望我们能帮他们实现或者提供这么一个方案,就是项目自动化构建时,项目的版本号能跟着环境变更。比如是开发环境,则项目的API包版本就形如1.0-dev,如果是测试环境,则项目的API版本就形如1.0-test

02示例演示

项目层级如下

方案一:mvn -Denv.project.version=1.0-env

注: env.project.version为自定参数变量,env为dev或者test

01在maven项目的父级pom设置变量,形如下

代码语言:javascript
复制
<groupId>org.example</groupId>
    <artifactId>demo-parent</artifactId>
    <packaging>pom</packaging>
    <version>${env.project.version}</version>

    <properties>
        <env.project.version>1.0-SNAPSHOT</env.project.version>
    </properties>

02修改其子模块pom

代码语言:javascript
复制
<parent>
        <artifactId>demo-parent</artifactId>
        <groupId>org.example</groupId>
        <version>${env.project.version}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module-biz</artifactId>
代码语言:javascript
复制
<parent>
        <artifactId>demo-parent</artifactId>
        <groupId>org.example</groupId>
        <version>${env.project.version}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module-api</artifactId>

03执行如下命令

代码语言:javascript
复制
mvn clean package -Denv.project.version=1.0-dev -DskipTests

如果要打包发布到私有仓库,则执行

代码语言:javascript
复制
mvn clean deploy-Denv.project.version=1.0-dev -DskipTests

04验证

从截图,可以看出达到预期的效果

方案二 maven的profile+自定参数变量

01在maven项目的父级pom设置变量,并添加profile,形如下

代码语言:javascript
复制
<properties>
           <env.project.version>1.0-SNAPSHOT</env.project.version>
       </properties>
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env.project.version>1.0-dev</env.project.version>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <env.project.version>1.0-test</env.project.version>
            </properties>
        </profile>
    </profiles>

02修改其子模块pom

代码语言:javascript
复制
<parent>
        <artifactId>demo-parent</artifactId>
        <groupId>org.example</groupId>
        <version>${env.project.version}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module-biz</artifactId>
代码语言:javascript
复制
<parent>
        <artifactId>demo-parent</artifactId>
        <groupId>org.example</groupId>
        <version>${env.project.version}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module-api</artifactId>

03执行如下命令

代码语言:javascript
复制
mvn clean package -Ptest -DskipTests

如果要打包发布到私有仓库,则执行

代码语言:javascript
复制
mvn clean deploy -Ptest -DskipTests

注:不指定-P默认为dev

04验证

从截图,可以看出达到预期的效果

方案三(推荐) mvn versions:set -DnewVersion=1.0-dev

注: 使用该命令,项目无需做任何变动。

直接执行命令

代码语言:javascript
复制
mvn versions:set -DnewVersion=1.0-dev

如果要发布到私仓,此时要分两次命令执行,命令如下

代码语言:javascript
复制
mvn versions:set -DnewVersion=1.0-dev
mvn clean deploy -DskipTests

此时查看idea,会发现

项目版本号已经发生改变,且产生一个pom.xml.versionsBackup文件,这个文件是用来回退版本用的,其内容如下

如果确认没问题,则可以执行你本来要操作的步骤,比如打包或者发布,形如下命令

代码语言:javascript
复制
mvn clean package/deploy -DskipTests

从截图,可以看出达到预期的效果。如果有问题想回退版本,则执行

代码语言:javascript
复制
mvn versions:revert

进行回退。不过能成功执行该步骤的前提是没有执行

代码语言:javascript
复制
mvn versions:commit

且存在pom.xml.versionsBackup文件文件

如果不想产生pom.xml.versionsBackup文件,则可以在父pom配置如下插件

代码语言:javascript
复制
<build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.8.1</version>
                <configuration>
                    <generateBackupPoms>false</generateBackupPoms>
                </configuration>
            </plugin>
        </plugins>
    </build>

指定generateBackupPoms为false

参数介绍

其具体更多详细介绍可以查看官网

http://www.mojohaus.org/versions-maven-plugin/index.html

03总结

从本示例的业务场景来看,通过自定义变量虽然也可以达到效果,但是如果子模块一多的话,可能容易发生漏改现象。因此个人推荐使用mvn versions:set -DnewVersion=1.0-dev这种形式来进行修改

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01前言
  • 02示例演示
  • 01在maven项目的父级pom设置变量,形如下
  • 02修改其子模块pom
  • 03执行如下命令
  • 04验证
  • 01在maven项目的父级pom设置变量,并添加profile,形如下
  • 02修改其子模块pom
  • 03执行如下命令
  • 04验证
    • 参数介绍
    • 03总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档