背景
最近接到一个jar包依赖统一管理的任务,提供一个类似于spring-framework-bom的pom管理项目(后续我称这个为pilot项目),在接到这个任务之前,对maven的熟悉程度只能说是会简单的使用,这次才发现,其实在使用过程中也是比较浑浑噩噩的,很多东西没有深入去了解和思考,导致的影响可能对于一个项目来说,编译和运行阶段不会出什么错(就算出错了,也能很快的排查掉),但是如果要对项目有严格要求和追求的话,可能就需要更细致学习。
PS:可能我遇到的问题比较小儿科我自己不懂,但都是我实际遇到的问题总结,大家勿喷!
存在的问题
在这次任务的过程中并不顺利,本身mgr给我的时间是30天(包含周末),但我当时心里的想法是,这个事情需要这么长时间吗,我觉得我一个礼拜就能搞定,但幸好我没有说出来,目前我的任务状态还是没有上线,并且有一定概率会延期。我发现了很多项目都存在一个问题,试想下我们在使用maven的版本管理机制的目的是什么?是为了解决jar包冲突问题,这个事情的价值体现,也就是统一封装和管理一些有公共依赖的项目的jar包的版本,让项目结构,或者说你们的external libraries结构更清晰,减少pom结构代码的冗余,也可以结合项目原型去打造一个包含jar包管理的后端脚手架,而我在完成任务的过程中,发现大多数的项目都会引入一个pilot或者多个pilot,而且pilot里面包含的依赖,大多数的项目还会在自身的dependencyManagement再次引入,这种情况还不少,那这样就会导致几个问题
- 出现了冗余代码
- 违背了pilot的初衷
- 会给后来人产生误导
- 有可能因为这种冗余导致产生jar包依赖冲突的现象,我自己就遇到了,因为我自己cv的时候粗心大意导致的。
dependencyManagement
maven语法提供的标签,用来统一管理jar包依赖的版本,但是不会引入依赖,只有当在某个模块中显示引入某个依赖的时候才会真正的引入jar包,以下是我在工作中踩的几个坑,也让我对这个标签的了解更加深入,其实这些坑都是围绕着同一个问题,当项目中直接或者间接存在同一个依赖但是不同的版本,maven最终采用的是哪个版本,有没有什么统一的规则,或者说同一个版本,但是因为同一个版本不存在差异性就