Maven管理工具
文章目录
1. 简介
Maven是一款Java项目管理工具,可以实现自动化构建、测试、打包和发布项目
主要功能
- 依赖管理:自动下载依赖库且保证版本没有冲突、依赖版本管理等
- 构建管理:将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库
1.1. 目录结构
project
├── pom.xml --项目管理文件
├── src
│ ├── main --项目主要代码
│ │ ├── java --存放Java源码
│ │ ├── resources --存放配置文件
│ │ └── webapp --存放WEB资源
│ │ └── WEB-INF
│ │ └── web.xml
│ └── test --项目测试代码
│ └── java
└── target --项目构建目录
└── classes
1.2. GAVP属性
GAVP是指GroupId、ArtifactId、Version、Packaging的缩写,用于唯一标识一个项目
- GroupID格式(必须):com.{公司/BU }.业务线.[子业务线],最多 4 级
- ArtifactID格式(必须):产品线名-模块名,语义不重复不遗漏
- Version格式(必须):主版本号.次版本号.修订号
- 主版本号:不兼容的API修改或新增改变产品方向的功能
- 次版本号:向下兼容的功能性新增
- 修订号:修复BUG、没有修改方法签名的功能加强,保持API兼容性
- Packaging规则:指示将项目打包文件的类型
- jar(默认值):普通Java工程,打包成
.jar
文件 - war:Web工程,打包成
.war
文件 - pom:用于被继承的父工程
- jar(默认值):普通Java工程,打包成
2. 功能介绍
2.1. 依赖管理
2.1.1. 基本配置
<dependencies>
<dependency>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>version</version>
</dependency>
...
</dependencies>
格式说明
- dependencies标签用于配置项目的所有依赖,是根标签project的子标签
- dependency标签用于配置具体的依赖,其子标签指定依赖的GAV属性(从官方仓库查找)
- 在properties标签的自定义子标签(推荐名
package.version
)中配置版本号并通过${}
+ 标签名引用
作用范围
scope标签用于指定依赖的生效范围,具体说明如下
范围 | main | test | 打包运行 |
---|---|---|---|
compile(默认) | √ | √ | √ |
provided | √ | √ | |
test | √ | ||
runtime | √ |
2.1.2. 依赖传递/冲突
依赖传递
- 当模块 A 依赖于模块 B且模块 B 又依赖于模块C时,那么模块A 间接依赖于模块 C
解决方案
构建工具能够自动解析并加载所有直接或间接依赖,并保证版本正确
依赖冲突
- 依赖冲突是指直接或间接依赖出现相同模块时,依赖之间可能存在依赖冲突
解决方案
构建工具能够自动选择重复的依赖并终止依赖传递来解决冲突问题,选择原则为
- 短路径优先原则(第一原则),即选择路径短的依赖
- 先声明优先原则(第二原则),即选择先声明的依赖
2.2. 构建管理
2.2.1. 构建命令
命令语法
mvn command
说明
- mvn后可使用多个命令,命令之间用
space
隔开 - 执行命令时需要进入到项目路径即pom.xml文件所在的路径
常用命令
命令 | 说明 |
---|---|
clean | 清理编译或打包后的项目结构,删除target |
compile | 编译项目,生成target |
test | 执行测试源码 (测试) |
site | 生成一个项目依赖信息的展示页面 |
package | 打包项目,生成war/jar文件 |
install | 打包后上传到maven本地仓库(本地部署) |
deploy | 打包后上传到maven私服仓库(私服部署) |
2.2.2. 生命周期
构建生命周期是一组固定构建命令的有序集合,触发周期中的某个命令会自动触发其前面的命令
- 清理周期:对项目编译生成文件进行清理,包含的命令依次为clean
- 默认周期:构建的所有步骤,包含的命令依次为compile、test、package、install/deploy
- 报告周期:包含的命令依次为site
推荐方案
- 打包:
mvn clean package
- 重新编译:
mvn clean compile
- 本地部署:
mvn clean install
3. 继承/聚合
3.1. 继承
继承是指Maven工程中一个项目从另一个项目中继承配置信息的机制,用于在父工程中统一管理依赖
3.1.1. 语法结构
父工程
- 配置打包方式packaging为pom
子工程
- 在根标签中添加parent标签
- 在parent标签中通过GAV属性指定父工程
3.1.2. 依赖管理
父工程
- 声明依赖:在根标签project的子标签中dependencyManagement统一配置依赖
子工程
- 导入依赖:设置GA属性使用父工程中声明的依赖
- 若需要指定GAV属性,则导入子工程配置的依赖
3.2. 聚合
聚合是指将多个工程组织到一个父工程中,通过触发父工程的构建来按顺序触发子工程的构建,用于统一管理子工程的构建
3.2.1. 聚合语法
- 在父工程的根标签中添加modules标签
- 在modules标签中通过module配置子工程