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

问题引入

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

正式版不能重复发布,所以每次上线版本号都需要更改

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

子模块间也会项目依赖

最佳实践

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

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

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

优雅地修改多模块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了。是不是很方便?尤其当我们的项目有几十个子模块的时候,这就给我们带来很大的效率提升了。不然升级几次版本号,一天就过去了。

转载于:https://blog.51cto.com/14237164/2380887

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

  1. 在maven项目中使用Junit进行单元测试

    在maven项目中使用Junit进行单元测试(一) 在maven项目中使用Junit进行单元测试一 创建maven项目 编写测试用代码 小结 这是第一篇博文,所以我决定先从比较简单的内容写起,同时熟悉 ...

  2. Intellij Idea 多模块Maven工程中模块之间无法相互引用问题

    一.问题背景 在Intellij idea中,新建Maven项目,在魔项目中新建多个模块,发现模块间相互调用失败 二.问题原因 模块间无法相互引用为IDEA的一个BUG 三.问题解决 1.点击项目右上 ...

  3. 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题

    转载自   解决"Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer"问题 错误描述 当创建有动态web模块3.0 ...

  4. idea新建scala文件_IDEA maven项目中新建.scala文件

    本文首发于我的博客[IDEA maven项目中新建.scala文件] 分为三步 第一步.IDEA中安装scala插件 1.搜索安装 File-Sittings-Plugins-搜索安装scala 2. ...

  5. IDEA中Maven项目中界面右边的Maven Projects中子项目出现灰色

    问题描述:IDEA中Maven项目中界面右边的Maven Projects中子项目出现灰色 解决办法:原因是忽略了Maven模块. 第一步:在IDEA左上角的File-->Setting中找到M ...

  6. idea2019导入maven项目中的某些问题

    idea2019导入maven项目中的某些问题 idea2019导入maven项目,会出现很多莫名其妙的问题,需要注意的是如果是idea2019的版本是3月以前的,那会maven需要下载3.6.1以前 ...

  7. 解决 maven 项目中加入了 lombok 库后依然报错的问题

    解决 maven 项目中加入了 lombok 库后依然报错的问题 参考文章: (1)解决 maven 项目中加入了 lombok 库后依然报错的问题 (2)https://www.cnblogs.co ...

  8. executequery方法_在IDEA的maven项目中连接使用MySQL8.0方法教程

    首先看一下我的基本的开发环境: 操作系统:MacOS 10.13.5编辑器:IDEA 2018.3其他:MySQL8.0.15.Maven 3.3.9.JDK 1.8 好,下面就正式开始: 第一步:在 ...

  9. 【报错笔记】在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller

    在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller 解决方案:使用a链接来用

  10. Maven项目中使用JUnit进行单元测试

    1.打开maven项目中的pom.xml,添加JUnit 的jar包 2.在src/test/java下右键新建JUnit Test Cast 转载于:https://www.cnblogs.com/ ...

最新文章

  1. Android 布局中 如何使控件居中
  2. C#计算一段程序运行时间的三种方法
  3. 【线上圆桌整理 - 腾讯会议】进化中的视频会议
  4. 燕赵志愿云如何认证_人物|志愿者讲解员王静雅:用心讲好河北历史故事
  5. nginx 下配置使用Thinkphp5解决跨目录活动并且设置网站根目录
  6. Java 9和Project Jigsaw如何破坏您的代码
  7. UEFI+GPT安装Win10和RHEL6.5双系统
  8. vue2.0+vue-video-player实现hls播放的案例
  9. 英语-汉语600句-会见:Making an Appointment/约会
  10. 用javascript+PHP随机显示图片
  11. spring源码之@dependsOn
  12. linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定
  13. 实现lightbox效果
  14. IP数据报之首部长度解析
  15. A novel hybrid intrusion detection method integrating anomalydetection with misuse detection
  16. 1. 代码效率优化方法论
  17. 可视监控对讲、楼宇对讲等领域中的回声消除、音频降噪
  18. python期权价格计算器_GitHub - QSCTech-Sange/Options-Calculator: 期权价格计算器——金融工程第二次展示...
  19. 【小知识】opencv里去掉小连通区域的函数remove_small_objects()解析
  20. Spring Boot 集成 Elasticsearch

热门文章

  1. CodeForces 148D-Bag of mice(概率dp)
  2. android.content.SharedPreferences.edit()
  3. lib包含# #pragma comment
  4. 持续集成环境(Hudson)搭建
  5. 下载water mask 矢量数据
  6. ArcGIS操作小技巧(四)之拓扑工具条灰色无法操作
  7. VC6.0无法进入调试
  8. Apache Flink 进阶(三):Checkpoint 原理剖析与应用实践
  9. 不敢相信?System.currentTimeMillis() 居然存在性能问题
  10. 一种视频录制时,类似监控视频中加入动态时间标记的装置