Maven
Maven把项目开发和管理过程抽象为一个项目对象模型(POM)
POM(Project Object Model):项目对象模型
Maven的作用:
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:方便快捷地管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构:提供标准的、统一的项目结构
Maven核心概念
仓库
用于存储资源,包含各种jar包
坐标
用于描述仓库中资源的位置
Maven坐标主要组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
- version:版本号
- packaging:打包方式
项目构建
mvn compile # 编译
mvn clean # 清理(删除编译完成的东西)
mvn test # 测试
mvn package # 打包(打成jar包)
mvn install # 安装到本地仓库
依赖管理
依赖配置
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
依赖传递
依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
可选依赖指对外隐藏当前所依赖的资源——不透明
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——排除依赖就是不需要某依赖
依赖范围
scope
依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
servlet-api不参与打包,因为服务器上tomcat本来就有,会冲突
依赖范围传递性
带有依赖范围的资源在进行传递时,作用范围将受到影响
生命周期与插件
项目构建生命周期
Maven构建生命周期描述的是一次构建过程经历了多少个事件
Maven对项目构建的生命周期划分为3套:
- clean清理工作
- default
核心工作,例如编译、测试、打包、部署等 - site
产生报告,发布站点等
clean生命周期
- pre-clean 执行一些需要在clean之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean
执行一些需要在clean之后立即完成的工作
default生命周期
site生命周期
插件
多模块构建维护
聚合
聚合:
作用:管理多模块
继承
模块依赖关系维护
子工程在继承父工程之后,dependency的version可以不写
继承:
作用:通过继承可以实现在子工程中沿用父工程中的配置
继承依赖使用
在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本
继承的资源
继承与聚合
属性
属性类别
版本管理
资源配置多文件维护
配置文件引用pom属性
多环境开发配置
加载指定环境