优雅地修改多模块maven项目中

咱们都知道,maven的出现使得咱们能够很方便的管理项目依赖,并且能够实现多模块协做编译、打包、运行。大多数状况下,咱们一个maven项目都包含了多个子module,这个时候若是咱们想要把一个子module进行打包而且deploy到私服上供别人引用,那咱们须要:从父节点把整个project都deploy上去,这时别人才能拉到你上传的jar包。同时咱们须要保证咱们整个project中全部的module的version都是一致的。git

问题引入maven

对于咱们来讲,一般应用发展是很是快的,也就意味着咱们须要上线的周期很短,对于在测试时,咱们可使用-SNAPSHOT的方式,这样每次上传完,引用该依赖的项目发布时,会自动再从私服上下载最新的版原本替换本地的jar包。可是线上咱们都是使用release版本发布,因为release版本的依赖在相同的版本号下,引用该依赖的项目在发布时,不会再自动从私服上拉去最新的包来替换本地的包,因此就会出现问题。那就会有如下问题:测试

正式版不能重复发布,因此每次上线版本号都须要更改插件

当项目中包含几个子模块时,一般咱们想让子模块的版本号跟父项目的版本号保持一致xml

子模块间也会项目依赖it

最佳实践io

上面的三个问题中,最容易解决的是第三个问题,咱们能够在父项目的pom文件中的dependencyManagement中进行声明依赖,子模块直接使用,不须要指定版本号。编译

优雅地修改多模块maven项目中的版本号效率

子项目引用时,直接进行以下引用便可:module

优雅地修改多模块maven项目中的版本号

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

以往对于修改父项目的版本号,咱们很痛苦,每次都要把全部子模块中的父项目的版本号都替换一下,又不敢批量替换,因此只能一个一个的改掉。那我就在寻求一种更加高效的方式,可使得我运行一个命令或者怎么样就能够实现一次性把全部要改动的地方都改掉。念念不忘,必有回响!一个偶然的机会我还真发现了一个神器,它就是versions-maven-plugin,在项目中引入该插件之后,就能够一行命令实现修改父项目的版本号,而且子模块中的父项目版本号的声明也会一并被改掉,具体操做以下:

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

优雅地修改多模块maven项目中的版本号

其中generateBackupPoms参数是设置是否修改版本时对现有版本的文件进行备份。由于咱们的项目通常都是交给git管理的,因此不须要让该插件帮咱们备份,改错了,直接revert就行了。

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

相关文章
相关标签/搜索