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

  • 时间:2021-03-20 20:24 作者:linyb极客之路 来源: 阅读:521
  • 扫一扫,手机访问
摘要:前言最近业务开发部门由于开发环境和测试环境共用一个maven私仓,导致他们开发环境的API包和测试环境的API包发生了覆盖现象。于是他们向我们部门提出一个需求,希望我们能帮他们实现或者者提供这么一个方案,就是项目自动化构建时,项目的版本号能跟着环境变更。比方是开发环境,则项目的API包版本就形如1.0

前言

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

示例演示

项目层级如下

image.png

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

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

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

  <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>

2、修改其子模块pom

  <parent>        <artifactId>demo-parent</artifactId>        <groupId>org.example</groupId>        <version>${env.project.version}</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>module-biz</artifactId>
 <parent>        <artifactId>demo-parent</artifactId>        <groupId>org.example</groupId>        <version>${env.project.version}</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>module-api</artifactId>

3、执行如下命令

mvn clean package -Denv.project.version=1.0-dev -DskipTests

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

mvn clean deploy-Denv.project.version=1.0-dev -DskipTests

4、验证

image.png
image.png

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

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

1、在maven项目的父级pom设置变量,并增加profile,形如下

        <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>

2、修改其子模块pom

  <parent>        <artifactId>demo-parent</artifactId>        <groupId>org.example</groupId>        <version>${env.project.version}</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>module-biz</artifactId>
 <parent>        <artifactId>demo-parent</artifactId>        <groupId>org.example</groupId>        <version>${env.project.version}</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>module-api</artifactId>

3、执行如下命令

mvn clean package -Ptest -DskipTests

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

mvn clean deploy -Ptest -DskipTests

注:不指定-P默认为dev

4、验证

image.png
在这里插入图片形容

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

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

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

直接执行命令

mvn versions:set -DnewVersion=1.0-dev

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

mvn versions:set -DnewVersion=1.0-devmvn clean deploy -DskipTests
image.png

此时查看idea,会发现


image.png

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


image.png
假如确认没问题,则可以执行你原本要操作的步骤,比方打包或者者发布,形如下命令
mvn clean package/deploy -DskipTests
image.png

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

假如有问题想回退版本,则执行

mvn versions:revert

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

mvn versions:commit

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

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

 <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

参数详情

image.png

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

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

总结

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

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部