dependencyManagement
dependencyManagement是声明而不引入依赖--------因此子项目需要显式的声明需要用的依赖(不需要版本号)
子项目中引用一个依赖而无版本号时,会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,使用其版本号
一般来说用来管理版本的父工程都会使用这个标签进行统一版本管理。里面放dependencies标签。
然后,如果,父工程里只有dependencies标签,没有dependencyManagement标签,那么父工程的依赖会直接传递到子工程当中,即子工程即使没有引入A包,但是会有子工程的parent里有A包,那么就会导致子工程包含A包。这种方式一般来说都很少使用,只能是我们自己搭建demo的时候很随意的时候用用。一般公司项目都是dependencyManagement在父工程控制版本,然后子工程引入相应依赖而不声明版本,这样进行统一管理。
maven的版本冲突
![17d4123153bed3570acba1e56e365ccd.png](https://i-blog.csdnimg.cn/blog_migrate/e86c802fb44df17650c4f78e4fed1422.png)
上述过程中,项目Mall归结起来,依赖的fastjson会有三个版本。
而我们的jvm最终肯定只能接受一个版本的jar,所以必须有所取舍
maven默认的取舍规则是:
1、路径最短原则:product和customer里的fastjson引用路径较短,路径为两步 ;pay项目里的fastjson引用路径较长,路径为三步。因此pay中的fastjson被淘汰
2、同路径长度下,谁先声明谁优先: product和customer中的fastjson路径相同,那么就看在pom中是先声明product还是先声明customer,谁先用谁的
mvn dependency:tree
查出项目最终依赖的jar包树,看版本是否是我们预期的
--------------------------声明-------以上学习于腾讯课程的《享学课堂》
<profile>
maven配置的时候记得把这个加上,不然每次创建新项目默认使用1.5的编译器,识别不了lambda表达式。