注意:所有文章除特别说明外,转载请注明出处.
Maven
一、什么是Maven
1、 Maven是一款服务于Java平台的自动化构建工具。
发展历史: Make -> Ant -> Maven -> Gradle
项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
二、为什么要使用Maven
2.1 不使用Maven开发存在的问题
- 一个项目就是一个工程
- 项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下
- 项目中所需要的jar包都是必须是提前下载好的
- 项目中一个jar包所依赖的其他jar包必须手动导进来
2.2 Maven 的优点
1、原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2、原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载。
3、原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
4、原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。
三、Maven 构建过程的环节
1、清理:将以前的编译得到的旧的class字节码文件删除
2、编译:将Java源程序编译为class字节码文件
3、测试:自动测试,自动调用 junit 程序
4、报告:测试程序执行的结果
5、打包:动态web工程打 war 包, Java工程打 jar 包
6、安装:Maven特定的概念——将打包得到的文件复制到 “仓库” 中指定的位置
7、部署:将动态生成的 war 包复制到 Servlet 容器指定的目录下,使其可以正常运行
四、Maven 的核心概念
4.1 约定的目录概念(一般)
4.1.1 约定的目录结构:
1 | [1] 根目录:工程名 |
4.1.2 为什么要使用约定的目录文件:
- Maven 要负责我们这个项目的自动化构建,以编译为例,Maven 想要自动进行构建,那么他必须知道Java的源文件保存在哪里
- 如果想要我们自定义的东西被框架或者是工具知道。(配置文件)
4.2 POM(一般)
含义:Project Object Model 项目对象模型
POM.xml 是 Maven 工程的核心配置文件,与构建过程相关的一切设置都在这个文件之中进行配置。重要程度相当于 web.xml 对于动态web工程。
4.3 坐标(一般)
4.3.1 数学中的坐标:
[1] 在平面或者空间上 使用 x,y,z,来确定平面或者空间之中的任何一个点。
4.3.2 Maven 中的坐标:
使用下面三个向量在仓库之中唯一定位一个Maven工程。
(==G==)groupid:公司或者组织域名倒序 + 项目名
1 | <groupId>org.springframework</groupId> |
(==A==)artifactid: 模块名
1 | <artifactId>spring-web</artifactId> |
(==V==)version: 版本信息
1 | <version>5.0.8.RELEASE</version> |
4.4 依赖(重要)
4.4.1 依赖解析:
Maven 解析依赖信息时,会到本地仓库之中查找被依赖的jar包。
对于我们自己开发的 Maven 工程,使用 ==mvn install == 命令安装之后就可以进入仓库。
4.4.2 依赖的范围:
compile
- 对主程序是否有效: 有效
- 对测试程序是否有效: 有效
- 是否参与打包: 参与
test
- 对主程序是否有效: 无效
- 对测试程序是否有效: 有效
- 是否参与打包: 不参与
- 对主程序是否有效: 无效
provided
【1】好处:可以传递的依赖不必在每个工程模块之中都重复声明。只需要在‘最下面“声明一次即可。
【2】注意:非 compile 范围的依赖无法传递。
4.4.4 依赖的排除
【1】 需要依赖排除的场合
不稳定的jar包,不想让他加入到工程之中。
【2】如何排除(以排除AAAA为例)
1 | <exclusions> |
4.4.5 依赖的原则:
【1】 路径最短者优先
【2】 路径相同者先声明者优先
4.4.6 统一管理依赖的版本
假设Spring 的 jar 包的依赖版本都是 4.0.0, 此时想要统一升级成为 4.1.1 怎么办?
【1】 手动逐一修改,不可靠
【2】 建议配置方式:
i:使用 properties 标签统一声明版本号
1 | <properties> |
4.5 仓库(了解)
Maven 仓库分为:
- 本地仓库
- 当前电脑上部署的仓库目录,为当前电脑上的所有Maven工程服务
- 远程仓库
- 私服:搭建在局域网上面的Maven仓库,为当前局域网范围内的所有 Maven 工程服务。
- 中央仓库:架设在 Internet 之中,为全世界的 Maven 工程服务。
- 中央仓库镜像: 为了分担中央仓库的流量,提升用户访问速度。
- 仓库之中保存了什么?
- Maven 自身需要的插件
- 第三方工具或者工具的jar包
- 我们自己开发的Maven工程
4.6 生命周期/插件/目标(了解)
4.7 继承(了解)
4.8 聚合(了解)
五、Maven 常用命令:
5.1 命令使用范围:
执行与构建相关的 Maven 命令,必须进入 pom.xml 所在的目录。
==5.2 常用命令==
1. mvn clean: 清理
2. mvn compile : 编译主程序
3.mvn test-compile :编译测试程序
4. mvn test : 执行测试
5. mvn package: 打包
6. mvn install :将自己的 jar 包加入到本地仓库之中
六、Maven 生命周期:
1、各个构建环节的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
2、Maven 的核心程序定义了抽象的生命周期,生命周期的各个阶段的具体任务是由插件来完成的。
3、Maven 的核心程序为了更好地实现自动化构建,按照这一特点执行生命周期之中的各个阶段,不论要执行那个阶段,都是从这个生命周期的最初的位置开始执行的。