maven如何动态统一修改版本号的方法步骤

作者:linyb极客之路 时间:2022-06-05 20:08:43 

前言

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

示例演示

项目层级如下

maven如何动态统一修改版本号的方法步骤

方案一: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、验证

maven如何动态统一修改版本号的方法步骤

maven如何动态统一修改版本号的方法步骤

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

方案二 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、验证

maven如何动态统一修改版本号的方法步骤

maven如何动态统一修改版本号的方法步骤

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

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

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

直接执行命令


mvn versions:set -DnewVersion=1.0-dev

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


mvn versions:set -DnewVersion=1.0-dev
mvn clean deploy -DskipTests

maven如何动态统一修改版本号的方法步骤

此时查看idea,会发现

maven如何动态统一修改版本号的方法步骤

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

maven如何动态统一修改版本号的方法步骤

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


mvn clean package/deploy -DskipTests

maven如何动态统一修改版本号的方法步骤

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

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


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

参数介绍

maven如何动态统一修改版本号的方法步骤

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

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

总结

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

来源:https://segmentfault.com/a/1190000038646318

标签:maven,修改版本号
0
投稿

猜你喜欢

  • Android SharedPreferences数据存储详解

    2023-08-05 13:32:47
  • spring Roo安装使用简介

    2023-04-10 09:31:50
  • 用java实现杨辉三角的示例代码

    2023-08-12 09:02:21
  • C#创建windows系统用户的方法

    2022-07-16 20:30:12
  • Java nacos动态配置实现流程详解

    2021-06-04 19:18:30
  • mybatis 报错显示sql中有两个limit的解决

    2022-04-30 02:50:49
  • C#集合查询Linq在项目中使用详解

    2022-09-16 13:50:09
  • jdk动态代理源码分析过程

    2023-03-01 05:05:59
  • Spring Boot与RabbitMQ结合实现延迟队列的示例

    2021-08-31 02:02:01
  • Springmvc ajax跨域请求处理方法实例详解

    2023-08-25 22:56:46
  • Struts2 的国际化实现方式示例

    2022-08-10 07:26:45
  • Unity的OnOpenAsset实用案例深入解析

    2021-05-30 01:37:16
  • Spring的IOC控制反转详解

    2023-08-24 02:50:50
  • 利用Android画圆弧canvas.drawArc()实例详解

    2022-05-21 08:45:54
  • Java实现中文算数验证码的实现示例(算数运算+-*/)

    2023-10-23 03:08:09
  • Spring 与 JDK 线程池的简单使用示例详解

    2023-08-20 04:02:59
  • Maven之导入thymeleaf依赖飘红问题及解决

    2023-11-12 12:49:05
  • java泛型详解

    2023-06-07 23:54:47
  • Android详解之NoHttp最基本使用(无封装)

    2022-09-28 17:11:51
  • C#基础之Lambda表达式用法实例教程

    2021-12-06 14:07:56
  • asp之家 软件编程 m.aspxhome.com