1 dependecyManagement下面的依赖不会被执行 一般用于父类模块 公用的依赖 方便让子类集成 如junit
Build下面对应的是maven插件
dependecyManagement和dependencies的区别在于:dependecyManagement让所有的子项目使用依赖项的统一版本,通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
这样的好处是:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致。
2 dependency scope 依赖的范围 对编译 测试 和运行的适用
Compile 默认 就是全部都适用
Provided 在编译和测试的时候有效
Runtime 在测试和运行的时候有效
Test 只在测试的范围内有效
System 在测试和编译的时候有效 与本机系统相关联 可移植性差
Import 导入的范围 ,它只使用在dependecyManagement中表示从其他的pom中导入dependecy的配置
3 maven的生命周期
清理 编译 测试 打包 集成测试 验证 部署
clean compile package install
4 传递依赖和排除依赖
传递依赖是指C依赖B B依赖A 首先需要分别对B和A 进行clean install 操作 安装到本地仓库里面去 然后再B和C中 加入A和B的坐标 即groupId artifactId version 标签 然后对B和C进行compile编译操作
排除依赖需要使用exclusions标签让C脱离对A的依赖
在exclusion标签中加入A的坐标
5 依赖冲突的时候 解决原则是
短路优先 哪条依赖路线短 先解析谁
路线长度一样时 哪个先声明的优先解析谁
6 聚合和继承
对每个项目一个个的install到中心仓库效率太低
用一个主容器包含他们 将主容器的packaging类型改为pom
加入modules标签 在一个个module标签中声明
继承就是提前公用的依赖放到父类中 放入dependecyManagement中
可以将里面的一些标签声明成属性 用el表达式类似的表示出来
然后在父类中加入parent标签 加入父类坐标删除之前的依赖jar包