1.简介
Apache Mavne是一个项目管理和构建工具,它基于项目对象模型(Project Object Mode,简称POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
2.特性
2.1 项目结构
提供了一套标准化的项目结构,所有IDE(eclipse,myeclipse,idea Utilimate)使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用。
2.2 依赖管理机制
提供了一套依赖管理机制,管理所依赖的第三方资源(jar,插件等)。Maven 使用标准的坐标配置来管理各种依赖,只需要简单的配置就可以完成依赖管理
2.3 构建流程
提供了一套标准化的构建流程(编译,测试,打包,发布…)。Maven提供了一套简单的命令来完成项目构建
3.生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
生命周期各个阶段:
- validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
- initialize(初始化) 初始化构建状态,比如设置属性值。
- generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
- process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
- generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
- process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
- compile(编译) 编译项目的源代码。
- process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
- generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
- process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
- generate-test-resources(生成测试资源文件) 为测试创建资源文件。
- process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
- test-compile(编译测试源码) 编译测试源代码到测试目标目录.
- process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
- test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
- prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
- package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
- pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
- integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
- post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
- verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
- install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
- deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
4.坐标
Maven中坐标是资源的唯一标识,使用坐标来引入所需要的资源(如jar包)
4.1 组成部分
坐标一般由以下部分构成:
- groupId: 隶属的组织名称,通常是域名反写,如:com.alibaba
- artifactId:项目名称,通常是模块名称,如:order-service
- version:版本号
- scope:作用范围,默认值为compile。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
4.2 scope作用范围
5.仓库
仓库是用来存放各种jar的集合,可以分为三类:
- 本地仓库:自己计算机上的一个目录。
- 远程仓库(私服):**自己公司搭建的私有仓库。
- 中央仓库:**由maven团队维护的全球唯一的仓库,地址:https://repo1.maven.org/maven2/
jar包查找顺序:
①查找本地仓库
- 如果有对应的jar,则直接返回
- 如果没有,则查找远程仓库
②查找远处仓库
- 如果有对应的jar,则下载该jar到本地仓库并返回
- 如果没有,则查找中央仓库
③查找中央仓库
- 如果找到对应的jar,则下载该jar到本地仓库并返回
- 如果没有,则提示报错
6.maven安装
- 从官网http://maven.apache.org/ 下载安装包apache-maven-3.8.5.rar 并解压。
- 配置环境变量Maven_HOME为安装路径的bin目录
- 修改配置文件setting.xml,配置本地仓库和阿里云私服
配置本地仓库和远程私服:
7.依赖管理
- 依赖(dependency)指当前运行所需的jar,一个项目可以设置多个依赖,一个依赖对应一个jar
依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被加载的资源如果依赖其他资源,则当前项目间接依赖其他资源
依赖冲突解决原则:
①路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
②声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
③特殊优先:当**同级(同一个pom.xm)**配置了相同资源的不同版本,后配置的覆盖先配置的
8.属性
通过自定义属性,可以更加方便的管理依赖,后续只需修改属性值就可以统一升级版本号。