开发项目的时候,jar包版本管理是一件很重要的事情。如果某个jar的snapshot版本被使用到了线上,这个jar的SNAPSHOT版本又经常更新,那线上的工程可能就遭殃了,今天发布好好的,明天发布又不行了。因此线上我们一定要使用release版本,下面我们来了解下maven对版本的管理。
进行较大项目开发时会涉及到项目管理的问题,一般都是采用Maven对Java项目进行管理,非常的方便。 目前常用的插件有两个:versions-maven-plugin和maven-release-plugin。
versions-maven-plugin
这个plugin比较简单,就是可以在父子项目中可以用命令直接修改对应的version
不必一个一个去修改。
修改
mvn versions:set -DnewVersion=1.0.1-SNAPSHOT
执行完会生成pom.xml.versionsBackup备份文件
撤销回滚
1
2
mvn versions:commit
mvn versions:revert
使用起来非常灵活,但是缺点就是需要人工去维护版本号,可能容易出错。发布的话需要我们自己去打tag
,比较麻烦。
maven-release-plugin
为什么要用它?
如果项目中需要发布一些外部系统所依赖的包, 那么应该有如下几步:
1.把版本号后面的SNAPSHOT去掉(SNAPSHOT是可以被重复覆盖的), 向maven私服发布一个稳定版本; 2.需要在git上面建立tag, 作为release的milestone; 3.为下一个迭代进行SNAPSHOT版本的准备.
该插件不但避免了人工操作可能出错的风险还会额外帮助我们做:
- 1.检查项目中所有的外部依赖包, 是否包含SNAPSHOT;
- 2.检查是否有未提交的代码;
- 3.运行单元测试, 确保全部通过.
这个插件是用来对项目进行发包
操作的,它利用POM中的version标签进行自动的版本号管理
- 将当前SNAPSHOT包进行去SNAPSHOT后提交一个commit到git
- 将当前release版本号进行最小位置加1后增加
-SNAPSHOT
后缀后提交一个commit
该插件通过scm
标签进行版本号的维护,每次release后都会对当前项目打一个tag
后保存到git上。
Command
mvn -B -U -DignoreSnapshots=true release:clean release:prepare release:perform
初始化标签
1
2
3
4
5
6
7
<scm>
<connection>scm:git:[email protected]:rd/project-name.git</connection>
<developerConnection>scm:git:[email protected]:rd/project-name.git
</developerConnection>
<tag>HEAD</tag>
</scm>
第一次commit修改
将tag
改为对应POM版本号的release版本号,如默认为project-name-1.0-SNAPSHOT,则release版本为project-name-1.0
1
2
3
4
5
6
7
<scm>
<connection>scm:git:[email protected]:rd/project-name.git</connection>
<developerConnection>scm:git:[email protected]:rd/project-name.git
</developerConnection>
<tag>project-name-1.0</tag>
</scm>
版本号改为
1.0
对应的commit为
[maven-release-plugin] prepare release project-name-1.0
第二次commit修改
将tag
改回HEAD
1
2
3
4
5
6
7
<scm>
<connection>scm:git:[email protected]:rd/project-name.git</connection>
<developerConnection>scm:git:[email protected]:rd/project-name.git
</developerConnection>
<tag>HEAD</tag>
</scm>
版本号改为
1.1-SNAPSHOT
对应的commit为
[maven-release-plugin] prepare for next development iteration
上线
一般公司都采用Jenkins进行线上服务的构建和发布,在通过Maven对项目进行构建完毕后就可以发包了。如果使用maven-release-plugin 进行打包的话,根据上面的说明,最新的version其实是SNAPSHOT,如果我们直接使用最新代码进行打包则将SNAPSHOT包发布到了线上!
所以正确的方式是使用上一步搭好的release的tag进行部署,如我们已经打好的1.0的tag:
[maven-release-plugin] copy for tag project-name-1.0
参考
- http://zhwbqd.github.io/2015/08/25/maven-release-plugin.html
- http://maven.apache.org/maven-release/maven-release-plugin/
本文首次发布于 LiuShuo’s Blog, 转载请保留原文链接.
-
Previous
授权专利-US10091236B2-Methods apparatuses, and storage mediums for acquiring legitimate installation packages -
Next
授权专利-RU2669683C2-Способ и устройство для представления значка wi-fi-сигнала и мобильный терминал