如何使用maven优雅地管理项目版本号

作者:syonChao

使用maven管理项目版本号

背景

经过一年的开发时间,采用spring MVC的框架创建的maven项目从最初的设立到目前的多功能的开发,经历了很多功能版本的迭代,但是之前一直忙于项目开发,并没有详细管理项目的分支以及tag,直到出现一个问题。
我们的项目于去年9月份上线生产环境,由于系统稳定运行,就一直没有跟随我们的项目升级,直到最近,生产环境有一个新的需求,不需要接入目前最新的项目版本(代价太大),只需要在之前代码的基础上新加一个功能即可,但是本人作为项目代码负责人有点慌,因为不记得当时用的代码是具体哪一个版本,不好拉取代码修改,针对这种教训,毅然决定管理好代码版本更迭。

前端展示或者接口查询项目版本号

查询以前的项目版本号,可以使用前端展示或者接口查询的方式,作为一个记录,原理是将项目的版本号写在配置文件(application.properties)中,java代码读取即可,但是每次更新版本,总觉得这样写比较low,因为pom文件中有项目的版本号,直接读取pom文件中的版本号不就可以了嘛。java能直接读取pom文件的内容吗?答案是:不可以,但是我们可以换一个方式,在maven构建项目的时候将pom文件中的版本号写入到配置文件中。
1. 在src\main\resources\application.properties放置如下内容

version=${project.version}

2. 配置pom.xml

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
  </build>

3. maven构建项目

执行maven package,
查看生成的配置文件中的application.properties, version值已经变成了pom.xml中的version

新的问题

一个maven工程,如果只是一个单一的主项目,那么只要手动修改一下pom.xml就可以了,耗不了多少时间。但是如果这个maven项目有很多的子模块项目,那么一个个手动的去改就比较复杂了,如下图:
这里写图片描述

规范

1、同一项目中所有模块版本保持一致
2、子模块统一继承父模块的版本
3、统一在顶层模块Pom的节中定义所有子模块的依赖版本号,子模块中添加依赖时不要添加版本号
4、开发测试阶段使用SNAPSHOT
5、生产发布使用RELEASE
6、新版本迭代只修改顶层POM中的版本
如下两图,图一表示根目录pom文件,图二表示web模块pom文件,如果手动修改,则每次都需要修改父pom和各个子pom文件中版本号,很是复杂。
这里写图片描述
这里写图片描述

解决方案

在子目录中使用${project.version},但是这只针对于依赖的jar包,对于模块版本号没有作用。使用maven命令修改(很多文章说需要使用插件versions-maven-plugin),但是本人测试不使用插件也可以成功。
前提:maven安装成功
执行命令:

mvn versions:set -DnewVersion=2.3-SNAPSHOP

2.3-SNAPSHOP表示新的版本号,然后可以查看,各个模块已经更新了版本号。

附:versions-maven-plugin插件的使用

在父pom文件中添加

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <generateBackupPoms>false</generateBackupPoms>
            </configuration>
        </plugin>
    </plugins>
</build>

总结

在项目代码中将版本号确定后,发布到环境,然后将该版本打tag,以后如果发现环境有bug(或者添加新功能),先查询该环境对应的项目版本号,然后根据该版本新建release分支,修改即可。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值