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


    前言

    最近业务开发部门因为开发环境和测试环境共用一个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-dev
    mvn 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这种形式来进行修改

  • 相关阅读:
    C# 特性(Attribute)学习
    ASP.NET Request.MapPath() 与 Server.MapPath()
    Asp.net对http request 处理的全过程!
    保存网址
    寻找silverlight高手帮忙解决问题,谢谢,
    基于.Net Framework的N层分布式应用开发
    VB.NET 代码转为C#
    刚刚开通博客噢 。欢迎大家光临啊
    配置本地服务器的几种方式
    前端必备工具 (记录)
  • 原文地址:https://www.cnblogs.com/linyb-geek/p/14187404.html
Copyright © 2020-2023  润新知