目录
1. 构建过程
2. 仓库
3. 依赖范围->声明在坐标之下
4. 生命周期
5. 依赖传递
6. 依赖原则(冲突解决)
A. 最短路径原则【就近原则】
B. 路径长度相同【先声明者优先】
C. 依赖的排除
7. Jar包版本统一管理
A. 工程内【properties】
B. 工程间【继承】
Maven是Java的自动化构建工具,可以管理jar包,简化项目构建、发布过程。
1. 构建过程
* 清理:clear,删除原编译文件,方便加入后来编译的文件
* 编译:compile,将源Java文件生成为class字节码文件,生成target目录
* 测试:test-compile,编译测试
* 报告:出测试报告
* 打包:package,将工程打为war、jar包
* 安装:install,将打包文件传输至仓库,执行后我们自己的maven工程就能在仓库找到
* 部署:将war包复制到servlet容器的对应目录下
注:任一命令均从开头执行,如package是从clean执行的。同时存在关系:约定>配置>编码,常可以通过配置解决问题,以配置方式告诉框架一些信息。
2. 仓库
私服:局域网内的maven仓库,如公司内部的仓库,为小范围共同开发的人提供服务,如Nexus
中央仓库:包括maven自己的工程、第三方的jar包等,为全世界的maven项目服务
中央仓库镜像:架设在各大洲的中央仓库,为中央仓库分担流量,提高用户访问速度,如阿里云中央仓库
3. 依赖范围->声明在坐标之下
jar包的坐标可唯一指定一个工程,一个项目也有其坐标,在其pom文件最前方,是项目的唯一标识。
| Compile(默认) | Test | Provided | Runtime | |
| 主程序 | 有效 | 无效 | 有效 | 无效 |
| 测试程序 | 有效 | 有效 | 有效 | 有效 |
| 打包 | 参与 | 不参与 | 不参与 | 参与 |
| 例如 | Spring-core | Junit | Servlet-api | JDBC驱动 |
4. 生命周期
生命周期由各个阶段组成,规定各个构建环节的执行顺序,不能打乱,即当你执行一个阶段时,前面的阶段会自动执行。
maven核心程序定义了抽象的生命周期,生命周期的各个阶段具体任务是由插件完成的。Phase==>plugin==>goal
maven有三套独立的生命周期:clean、site、default(编译、测试、打包、安装、部署)
5. 依赖传递
依赖分为直接依赖和间接依赖,如D->C->B->A,则C对D而言是直接依赖,A对D而言是间接依赖,他们之间可呈树状的层次关系,所以又叫依赖树。
只有compile范围的依赖可传递,test和provided的不可。
6. 依赖原则(冲突解决)
A. 最短路径原则【就近原则】
离最近的优先,如D->C->B->A ,C依赖E1,B依赖E2,实际上D对依赖的引用为离他最近的E1。【解决:可直接在D中显式声明E的版本】
B. 路径长度相同【先声明者优先】
如B->A、C->A,B/C为A的直接依赖,B/C又分别依赖于D1、D2,路径距离相同,则A对D的依赖由B/C在A的pom.xml文件声明顺序决定。
C. 依赖的排除
D->C->B->A,如想取消C对A的引用,加上exclusions标签即可,甚至不用指定版本,与此同时,D对A的引用也被排除了(中间就给掐了)。
7. Jar包版本统一管理
A. 工程内【properties】
在一个maven工程中,多个jar包的版本统一管理。
如spring的核心jar包有7个,可通过本工程中自定义properties标签
B. 工程间【继承】
- 可创建一个maven工程A作为工程B、C、D的父工程,A的打包方式为pom
放在项目坐标下; - 在B、C、D中声明对父工程A的依赖,和A坐标同级,
; - 将子工程坐标中与父工程同级的内容删除,如groupId;
- A中统一声明对B、C、D同样的jar包版本管理,标签树结构为:
- - ; - B、C、D中pom文件相关jar包可删除版本号
注:参考学习视频:
B站尚硅谷:Maven零基础入门教程(一套轻松搞定maven工具)



