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

 更新时间:2020年12月25日 12:02:10   作者:linyb极客之路  
这篇文章主要介绍了maven如何动态统一修改版本号的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

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

示例演示

项目层级如下

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

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

方案三(推荐) 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

此时查看idea,会发现

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

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

mvn clean package/deploy -DskipTests

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

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

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

参数介绍

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

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

总结

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

到此这篇关于maven如何动态统一修改版本号的方法步骤的文章就介绍到这了,更多相关maven动态统一修改版本号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java自定义类加载器如何实现类隔离

    java自定义类加载器如何实现类隔离

    这篇文章主要介绍了java自定义类加载器如何实现类隔离问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Mybatis SQL日志如何转换为可执行sql

    Mybatis SQL日志如何转换为可执行sql

    这篇文章主要介绍了Mybatis SQL日志如何转换为可执行sql问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • springboot+vue实现Minio文件存储的示例代码

    springboot+vue实现Minio文件存储的示例代码

    本文主要介绍了springboot+vue实现Minio文件存储的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Java 8中的Collectors API介绍

    Java 8中的Collectors API介绍

    这篇文章主要介绍了Java 8中的Collectors API,Stream.collect()是Java 8的流API的终端方法之一。它允许我们对流实例中保存的数据元素执行可变折叠操作,下文相关内容需要的小伙伴可以参考一下
    2022-04-04
  • Springboot 注解EqualsAndHashCode详解

    Springboot 注解EqualsAndHashCode详解

    注解@EqualsAndHashCode主要用于自动生成equals方法和hashCode方法,callSuper属性为true时,生成的方法会包括父类字段,为false则只包含当前类字段,IDEA工具中有检查提示并可自动修复相关代码,确保注解正确使用,更多详解可查阅相关文档
    2024-10-10
  • 解决Mybatis中foreach嵌套使用if标签对象取值的问题

    解决Mybatis中foreach嵌套使用if标签对象取值的问题

    这篇文章主要介绍了解决Mybatis中foreach嵌套使用if标签对象取值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java获取文件的类型和扩展名的实现方法

    Java获取文件的类型和扩展名的实现方法

    这篇文章主要介绍了Java获取文件的类型和扩展名的实现方法的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

    Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

    这篇文章主要介绍了Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法,需要的朋友可以参考下
    2015-11-11
  • Java如何调用TSC打印机进行打印详解

    Java如何调用TSC打印机进行打印详解

    这篇文章主要给大家介绍了关于Java如何调用TSC打印机进行打印的相关资料,文中介绍了三种方法,分别是两种后台打印以及JS打印 ,三种方法都给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-07-07
  • jenkins+Maven从SVN上构建项目的方法

    jenkins+Maven从SVN上构建项目的方法

    这篇文章主要介绍了jenkins+Maven从SVN上构建项目,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论