写在前面

我们都知道,maven的泛起使得我们可以很利便的治理项目依赖,而且可以实现多模块协作编译、打包、运行。大多数情况下,我们一个maven项目都包罗了多个子module,这个时刻若是我们想要把一个子module举行打包而且deploy到私服上供别人引用,那我们需要:从父节点把整个project都deploy上去,这时别人才气拉到你上传的jar包。同时我们需要保证我们整个project中所有的module的version都是一致的。

问题引入

对于我们来说,通常应用生长是异常快的,也就意味着我们需要上线的周期很短,对于在测试时,我们可以使用-SNAPSHOT的方式,这样每次上传完,引用该依赖的项目公布时,会自动再从私服上下载最新的版原本替换内陆的jar包。然则线上我们都是使用release版本公布,由于release版本的依赖在相同的版本号下,引用该依赖的项目在公布时,不会再自动从私服上拉去最新的包来替换内陆的包,以是就会泛起问题。那就会有以下问题:

  1. 正式版不能重复公布,以是每次上线版本号都需要更改
  2. 当项目中包罗几个子模块时,通常我们想让子模块的版本号跟父项目的版本号保持一致
  3. 子模块间也会项目依赖

最佳实践

上面的三个问题中,最容易解决的是第三个问题,我们可以在父项目的pom文件中的dependencyManagement中举行声明依赖,子模块直接使用,不需要指定版本号。

子项目引用时,直接举行如下引用即可:


虽然在子pom文件当中,我们可以不声明groupId和version属性,这样就可以实现所有子模块的版本号都和父项目保持一致了。然则在子pom中的<parent></parent>标签中的父项目的版本号照样要写的,否则编译就会报错,还不是很清晰是maven还没有进化到这么智能化,照样可能会造成其他杂乱从而必须要求指定。我原本想投机取巧的把这个父项目的版本号也用${project.version}来替换,但很可惜没能乐成,install的时刻报错了,我想可能是由于必须要先初始化<parent>标签才气知道${project.version}是多少吧!

以往对于修改父项目的版本号,我们很痛苦,每次都要把所有子模块中的父项目的版本号都替换一下,又不敢批量替换,以是只能一个一个的改掉。那我就在追求一种加倍高效的方式,可以使得我运行一个下令或者怎么样就可以实现一次性把所有要改动的地方都改掉。念兹在兹,必有回响!一个有时的机遇我还真发现了一个神器,它就是versions-maven-plugin,在项目中引入该插件以后,就可以一行下令实现修改父项目的版本号,而且子模块中的父项目版本号的声明也会一并被改掉,详细操作如下:

首先在父项目的pom.xml文件中,引用如下插件:


其中generateBackupPoms参数是设置是否修改版本时对现有版本的文件举行备份。由于我们的项目一样平常都是交给git治理的,以是不需要让该插件帮我们备份,改错了,直接revert就好了。

,

联博统计

www.u-healer.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

然后,你只需要在父pom.xml文件所在的文件夹下打开控制台,运行:mvn versions:set -DnewVersion=xxx,这样我们就可以实现把父项目的版本修改为xxx了。是不是很利便?尤其当我们的项目有几十个子模块的时刻,这就给我们带来很大的效率提升了。否则升级几回版本号,一天就过去了。

你千万别小看了该插件,它异常壮大的,内里包罗了好多个跟修改项目版本号相关的下令,详细人人可以参看该插件的官方文档(http://www.mojohaus.org/versions-maven-plugin/),好比版本变为下一个snapshot版本,变为下一个release版本等等,详细可参见下图:


versions-maven-plugin

写在最后

工作和生涯当中,我们要学会拿起工具来提升我们的效率,我们一生的时间很短,要做的事情有许多,不应该在这些重复的事情上虚耗太多的时间,别人有好工具我们就拿来用,没有相符的工具,那我们就实验自己来造工具,来节约别珍贵的时间,另一个层面来说,这其实是在拯救别人的声明,哈哈~

阿豪说
学到了?请我喝杯咖啡吧~