Maven应用相关说明
做用
项目管理工具,对项目进行构建依赖管理服务器
Maven POM
POM (Project Object Model) 项目对象模型,Maven工程的基本单元框架
POM指定配置
- 项目描述
- 项目依赖
- 项目插件
- 项目构建的Profile
Maven构建的生命周期
- 验证 validate:验证项目的配置是否正确
- 编辑 complier:编译源代码
- 测试 test:使用适当的测试框架测试
- 包装 package:对已编译的文件打包
- 检查 verify:对集成测试的结果检查,以保证质量达标
- 安装 install:安装打包的项目到本地仓库,以供其它项目使用
- 部署 deploy:拷贝最终的工程包到远程仓库中,以共享给其它开发人员使用
Maven仓库
- 本地仓库 本地机器.m2指向的文件目录
- 远程仓库 远程服务器的maven服务器,包maven仓库和其它私服
Maven 依赖
scope maven的scope决定依赖的包是否加入本工程的classpath下
依赖范围scope |
编译classpath |
测试classpath |
运行classpath |
传递性 |
complie |
Y |
Y |
Y |
Y |
test |
- |
Y |
- |
- |
provider |
Y |
Y |
- |
- |
runtime |
- |
Y |
Y |
Y |
system |
Y |
Y |
- |
Y |
详解
complie : 默认,强依赖,打包的时候会包含
test : 仅仅参与测试相关的编译、运行
provider : 打包的时候不会包含,使用时须要使用方提供相关设施(或者说是依赖),能够理解为编译后打包的时候excluded出去了
runtime : 无需参与编译,终端项目中与complie的区别:跳过编译,常与optional搭配使用
system:与provider相似,区别在与设施提供方不是maven仓库,而是从本地文件系统中获取。必定要配合systemPath属性使用(能够理解为从外部拷贝依赖到项目中)
optional 与 exclutions
相同点:都是排除jar是依赖
不一样点:
- optional:该依赖只能在当前项目中使用,不能传递到引用该项目的父项目,如父项目须要使用则须要主动依赖
- exclutions:主动排除子项目传递的依赖
重复依赖的两大原则
最短路径原则
好比以下两个版本的依赖关系:
V1版本:A -> B -> C -> D
V2版本:A ->M -> N -> G -> D
这个时候出现了两个版本的D,依据最短路径原则,V1版本依赖D的路径长度为3,V2版本依赖D的路径长度为4,因此选择V1版本的D依赖maven
声明优先原则
好比以下两个版本的依赖关系:
V1版本:A -> B -> C
V2版本:A -> D -> C
这个时候两个版本的最短路径是同样长,最短路径原则就会失效,这个时候maven的解决方案是在POM中的优先声明原则,谁先声明就优先使用谁的版本ide