为什么要用Maven
目的:进行依赖管理和生命周期管理
一、依赖管理:管理第三方jar包
- 每个项目不需要复制粘贴大量的jar包到WEB-INF,只需要维护一个jar包的引用,也就是“坐标”,实现代码重用
- 可以将当前jar包所依赖的jar包都导入,无需了解依赖的具体jar包。
- jar包冲突,使用最短路径优先原则或者先声明优先原则解决。
二、生命周期:清理、编译、测试、报告、打包、部署
好处:
- 不需要粘贴大量jar包
- 大项目拆分,maven可以把一个项目拆成多个工程
- 不需要自己下载jar包
- jar包版本统一
- jar包依赖自动载入
什么是Maven
一款自动化构建工具
构建的环节:
- 清理:清理以前编译的旧class字节码文件
- 编译:源代码编译成class字节码
- 测试:调用junit测试
- 报告:
- 打包:web打包成war,java打包成jar
- 安装:将打包得到的文件复制到仓库中制定位置
- 部署:将war复制到servlet容器下,可以运行
概念
Pom.xml:核心配置文件
坐标:使用三个向量,在仓库中定位一个maven工程
* groupId 项目名
* artifactId 模块名
* Version 版本
maven坐标和仓库对应的映射关系:[groupId][artifactId][version][artifactId]-[version].jar
仓库
* 本地仓库:当前用户目录\.m2\repository
* 远程仓库
* 私服:局域网仓库
* 中央仓库:因特网仓库
依赖
* 先去本地仓库找依赖,找不到去中央仓库下载到本地仓库,如果中央仓库找不到则编译失败。
* 如果依赖的自己开发的maven工程,需要先把工程install到本地仓库
* 依赖范围<Scope>
* Compile 默认值,所有阶段都会存在
* Provided 开发测试阶段有效
* Runtime 只在运行和测试有效
* Test 只在测试有效
* System 类似于provided 需要自己提供包含依赖的jar
* 依赖传递性:必须是compile范围的依赖,才可以依赖传递
* 什么是依赖传递:a依赖b,b依赖c,则c必须先mvn install然后b再mvn install a才能编译通过。
* 为c增加一个依赖d,a和b也会自动增加依赖d
* 依赖版本原则
* 路径最短原则
* 路径相同,先声明优先原则
* 统一管理依赖的版本:使用properties标签,自定义标签名,需要时候使用${自定义标签名}
生命周期:包含三套生命周期
* Clean lifecycle
* default-lifecycle
* Site lifecycle
插件:每个阶段都有插件,用来执行对应的生命周期的命令
- 不管执行生命周期哪个阶段,都是从头开始执行的。