flatten-maven-plugin插件版本管理原理分析

1.写在前面

在目前一些java开发的过程中,大部分的项目,应该占了大部分,都是使用maven进行项目的依赖管理的吧?也有一些可能使用gradle,个人用得也不是很多,这里就不多展开描述了。

在使用maven进行管理得时候,可能会出现下面这些问题:

随着项目的功能不断迭代,项目越做越大,那系统架构师,这个时候,就开始干活了,对项目的框架进行调整,例如:对公共部分进行封装,利用一些开闭原则,依赖倒置原则等,对框架大大阔斧的改造。

最终的结果,可能会出现多个共性的模块,例如下面这样:



由上可见,一般来说,好的框架,可能一些common包,就已经是封装成了好几个模块。(例如上面的)

对于这些公共的依赖,当我们进行修改的时候,只需要改对应的模块代码即可。

但是会出现这样的一个问题,每个common公共依赖的版本号,可能会不一样:可能common-core是1.0,common-datascope是1.1,common-datasource是1.2等等,这样就导致项目的依赖管理,会变得比较混乱。

当然,你都设置成一样的版本号,不也能解决这个问题嘛?

好嘛,好嘛,就算你设置成一样的版本号,也会出现这样的一个问题,当我们需要发布一个新的版本,每个common公共依赖的版本号,也得更新一次。

那不就是很麻烦了嘛?还得手动去改一次版本号。

当然,有些人这时候会抬杠,我更新版本的时候,common公共依赖版本号不更新,不行嘛?

怎么说呢?这肯定也是可以的,但是作为一个好的程序员,版本管理,我们还是得抓一抓。没个版本管理,别人都不知道,你有发过新的版本?都不知道你更新了些啥?

好了,对于上面的这些问题,不知道大家伙有无听懂?估计都能懂吧,不懂再读多几遍啦!!!

OK,对于上面的问题,我们有无便捷的方式处理呢?

对于这样的一个问题,我们都能想到,common公共依赖,我都用一个公共的parent的pom配置一个版本号,然后common的模块,都使用这样公共的版本号配置。

例如下面:




例如,上面这样:commons和common-core。

commons父项目,定义一个revision公共的版本号占位符。

common-core子项目,直接使用commons父项目定义的revision版本号。

这样的解析,应该都很清晰了吧。

好了,这样做的好处就是,我一改commons父项目的revision占位符,所有的子项目,都能直接应用到。

那就做到了一改全改的效果了,是不是一个很清晰的做法呢?

好了,想法是很简单啦,那要如何实现呢?这个时候,flatten-maven-plugin插件就跳出来了。

flatten-maven-plugin: 哥们能做到这个效果喔,用我吧!!!

好嘛,好嘛,那我们就来使用一下flatten-maven-plugin插件,上菜咯!!!

2.插件使用

  • common父项目
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>flatten-maven-plugin</artifactId> <version>1.1.0</version> <configuration> <updatePomFile>true</updatePomFile> <flattenMode>resolveCiFriendliesOnly</flattenMode> </configuration> <executions> <execution> <id>flatten</id> <phase>process-resources</phase> <goals> <goal>flatten</goal> </goals> </execution> <execution> <id>flatten.clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

定义使用flatten-maven-plugin插件。

额,好像就这么定义就完事了?

好吧确实如此,就是这么的简单!!!

上面的插件定义好之后,我们在进行项目的打包,就可以帮我们替换revision公共的版本号

执行:mvn install 或者 mvn package



3.原理分析

看到这里,我们来看一下这个插件的原理是什么?

可能小伙伴,都多多少少的带有这样的疑问,它是如何做到的呢?

当我们打包完成后,我们看一下项目的目录,可以看到多了一个.flattened-pom.xml文件。


我们看一下.flattened-pom.xml文件,对比一下之前的pom.xml文件,如下图所示:


由上图,可以看到,${revision}已经被替换成真实的版本号了。

那这样,我们就能猜到这个插件的原理了吧:

flatten-maven-plugin插件,通过将pom.xml文件里面的${revision}替换成真实的版本号,然后生成.flattened-pom.xml文件,然后mvn install或mvn package就以.flattened-pom.xml文件进行打包。

嗯嗯,我也是这么想的,可能不对,大家轻点喷!!!

4.问题处理

在我们看懂了3.原理分析后,其实我们就能处理相关的问题了。

这里,分享一个问题:${revision}无法被替换成真实的版本号。


有时候,会出现.flattened-pom.xml文件,${revision}无法被替换成真实的版本号

出现这样的问题,就是flatten-maven-plugin插件,不起作用导致的。

这里,我通过百度,很快就找到了相关的答案:



flatten-maven-plugin插件需要的maven版本,要3.5以上。

哎,好巧不巧,我idea的版本是2019,自带的maven是3.3.9



那这里,我们就得重新安装一个maven,3.6.0的。



这里也不能安装太高,因为我的idea是2019比较旧,太高会不行。不然会出现:idea maven 版本不兼容


好了,以上就是flatten-maven-plugin插件使用、版本管理原理分析和相关问题解决的分享了。

#Java##程序员#
全部评论

相关推荐

AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
本科生是不是只能去送外卖了
有气魄的海豚在喝茶:外卖这个版本被保安克制
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务