文章目录
- [1 Maven介绍](#1 Maven介绍)
-
- [1.1 Maven是介绍](#1.1 Maven是介绍)
- [1.2 Maven的作用](#1.2 Maven的作用)
- [2 Maven下载与安装](#2 Maven下载与安装)
-
- [2.1 官网下载](#2.1 官网下载)
- [2.2 文件目录](#2.2 文件目录)
- [2.3 环境配置](#2.3 环境配置)
- [3 Maven基础概念](#3 Maven基础概念)
-
- [3.1 仓库分类](#3.1 仓库分类)
- [3.2 依赖坐标](#3.2 依赖坐标)
- [3.3 坐标组成](#3.3 坐标组成)
- [4 Maven配置](#4 Maven配置)
-
- [4.1 本地仓库配置](#4.1 本地仓库配置)
- [4.2 远程仓库的设置](#4.2 远程仓库的设置)
- [4.3 镜像仓库配置](#4.3 镜像仓库配置)
- [4.4 IDEA配置Maven](#4.4 IDEA配置Maven)
- [5 Maven项目创建](#5 Maven项目创建)
-
- [5.1 Maven项目的构建命令](#5.1 Maven项目的构建命令)
- [5.2 IDEA创建Maven工程](#5.2 IDEA创建Maven工程)
- [6 Maven依赖管理](#6 Maven依赖管理)
-
- [6.1 依赖配置](#6.1 依赖配置)
- [6.2 依赖传递](#6.2 依赖传递)
- [6.3 依赖冲突](#6.3 依赖冲突)
- [6.4 可选依赖](#6.4 可选依赖)
- [6.5 排除依赖](#6.5 排除依赖)
- [6.6 依赖范围](#6.6 依赖范围)
- [6.7 依赖范围的传递性](#6.7 依赖范围的传递性)
- [7 生命周期与插件](#7 生命周期与插件)
-
- [7.1 生命周期](#7.1 生命周期)
- [7.2 插件](#7.2 插件)
1 Maven介绍
1.1 Maven是介绍
Maven的本质是一个项目管理工具,将项目开发中和管理过程抽象成一个项目对象模型 ---POM
POM:Project Object Model --即项目对象模型
1.2 Maven的作用
- 项目构建:提供标准的,跨平台的自动化项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源lar包,避免资源之间的版本冲突问题
- 统一开发结构:提供标准的,统一的项目结构
2 Maven下载与安装
2.1 官网下载
Maven官网:http://maven.apache.org/.
Maven下载地址:https://maven.apache.org/download.cgi
2.2 文件目录
Maven是绿色软件,下载解压即可使用
2.3 环境配置
- Maven运行需要依赖JAVA_HOME (前提需要安装配置好 jdk )
- 设置Maven自身的运行环境,需要配置MAVEN_HOME
1、配置Maven的安装目录:MAVEN_HOME
2、配置Maven的bin路径(path目录下)
3、cmd指令mvn检查安装
cmd输入mvn显示如下信息表示maven安装成功
3 Maven基础概念
3.1 仓库分类
-
仓库:用于存储资源,包含各种jar包
-
仓库分为:本地仓库、私服仓库、中央仓库 三种
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:私服仓库和中央仓库属于远程仓库,不在本地计算机上,为本地库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服仓库:部门或公司范围内存储资源的仓库,从中央仓库获取资源
-
私服的作用:保存具有版权的资源,一定范围内部共享,不对外开放
3.2 依赖坐标
- 坐标:Maven中的坐标用于描述仓库中资源的位置
- 官网:https://repo1.maven.org/maven2/
3.3 坐标组成
- 1 坐标组成
坐标名 | 含义 | 内容 |
---|---|---|
groupId | 定义当前Maven项目隶属的组织 | 域名倒写 |
artifactId | 当前Maven项目的名称 | 通常是模块名称 |
version | 定义当前项目的版本号 | 创建时定义 |
- 2 坐标官网
4 Maven配置
4.1 本地仓库配置
-
1、默认位置
默认的本地仓库的位置,在C:\Users\Administrator.m2\repository
-
2 打开conf目录下的setting.xml文件查看仓库的默认位置
-
3、设置自定义的仓库位置
设置自定义仓库之后,所有的jar包就会下载到此文件夹内
4.2 远程仓库的设置
中央仓库在国外,直接从本地连接外网下载需要的资源文件,传输和下载速率较慢,所以一般会使用私服作为衔接,用于资源的下载。
4.3 镜像仓库配置
阿里为广大开发者提供了阿里云镜像仓库,大大提高资源文件的下载和传输速率,提高了开发效率。
在settings.xml文件中配置镜像仓库
xml
<!--配置aliyun镜像仓库-->
<mirror>
<!-- 镜像的唯一标识符 -->
<id>nexus-aliyun</id>
<!-- 对中央仓库进行镜像 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称 -->
<name>Neuxs aliyun</name>
<!-- 镜像地址 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
4.4 IDEA配置Maven
File | Settings | Build, Execution, Deployment | Build Tools | Maven
5 Maven项目创建
5.1 Maven项目的构建命令
Maven构建命令使用 mvn 开头,后面添加功能参数,可以一次执行多个命令,使用空格分开
mvn compile #编译
mvn clean #清理
mvn test #测试
mvn package #打包
mvn install #安装到本地库
指令的作用:
mvn compile 执行编译操作:
生成项目编译后的class文件,项目根目录下生成target目录,
class文件存放的位置在 target 目录下
mvn clean 执行清理操作:
执行此命令,会将生成的class文件包括target目录一并清除
mvn test 执行测试操作,下载插件
执行此命令,会生成项目的测试报告,以及测试的class文件,
存放在target目录下
mvn package 执行打包操作:
执行此命令,会将源程序进行打包操作,如jar包,或war包
打包的过程中:先执行compile编译
再执行test-compile 测试编译
再执行test 测试动作
最后才执行package打包操作
mvn install 执行安装操作
将打包后的项目存放在groupId下的artfactId下的version下
安装的过程:同上,最后执行安装
5.2 IDEA创建Maven工程
- 1、创建项目
- 2、构建项目
6 Maven依赖管理
6.1 依赖配置
- 依赖指的是当前项目运行需要的jar包,一个项目可以设置多个依赖
- 格式:
6.2 依赖传递
依赖具有传递性,可以分为直接依赖和间接依赖
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:直接依赖的资源如果依赖其他资源,那么当前项目就间接依赖其他资源
6.3 依赖冲突
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,反之越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置相同依赖的不同版本,后配置的堵盖先配置的
6.4 可选依赖
可选依赖:指的是对外隐藏当前依赖的资源,资源不透明
6.5 排除依赖
排除依赖:是指主动断开依赖的资源,被排除的资源无需指定版本
6.6 依赖范围
-
依赖范围:
- 是指依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
-
作用范围:
- 主程序范围有效:main文件夹范围内
- 测试程序范围有效:test文件夹范围内
- 是否参与打包:package指令范围内
-
scope的属性值:
scope | main | test | package | 范例 |
---|---|---|---|---|
compile 默认) | Y | Y | Y | log4j |
provide | Y | Y | N | servlet-api |
runtime | N | N | Y | jdbc |
test | N | N | Y | junit |
6.7 依赖范围的传递性
带有依赖范围的资源在进行传递时,作用范围将收到影响
间接依赖 / 直接依赖 | compile | provide | runtime | test |
---|---|---|---|---|
compile | compile | provide | runtime | test |
provide | ||||
runtime | runtime | provide | runtime | test |
test |
7 生命周期与插件
7.1 生命周期
-
1、项目构建生命周期
Maven构建生命周期描述的是一次构建过程经历了多少个事件
-
2 项目构建生命周期,Maven对项目构建的生命周期划分为3套(上述周期划分)
- clean:清理工作
- default:核心工作,如编译,测试,打包,安装部署
- site:产生报告,发布站点
-
3 clean 构建生命周期
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后完成的工作
-
4 default 构建生命周期
操作 | 名称 | 功能 |
---|---|---|
validate | 校验 | 校验项目是否正确,并且所欲的信息可以完成项目的构建 |
initialize | 初始化 | 初始化构建状态 |
generate-sources | 生成源代码 | 生成包含在编译阶段中的任何源代码 |
process-sources | 处理源代码 | 处理源代码 |
generate-resources | 生成资源文件 | 生成将包含在项目包中的资源文件 |
process-resources | 处理资源文件 | 复制和处理资源到目标目录,为打包阶段做准备 |
compile | 编译 | 编译项目中的源代码 |
process-classes | 处理类文件 | 处理编译生成的文件 |
generate-test-sources | 生成测试源代码 | 生成包含在编译阶段中的任何测试代码 |
process-test-sources | 处理测试源代码 | 处理测试代码 |
generate-test-resources | 生成测试资源文件 | 生成将包含在项目包中的测试资源文件 |
process-test-resources | 处理测试资源文件 | 复制和处理测试资源到目标目录 |
test-compile | 编译测试源码 | 编译测试源代码到测试目标目录 |
process-test-classes | 处理测试类文件 | 处理测试源代码编译生成的文件 |
test | 测试 | 使用合适的单元测试框架运行测试 |
prepare-package | 准备打包 | 在实际打包之前,执行必要的操作为打包做准备 |
package | 打包 | 将编译后的代码打包成可分发格式的文件 |
pre-integration-test | 集成测试前 | 在执行测试之前的必要准备工作 |
integration-test | 集成测试 | 处理和部署项目到可以运行集成测试的环境中 |
post-integration-test | 集成测试后 | 在执行测试之后的必要准备工作 |
verify | 验证 | 运行任意的检查未验证项目包有效且达到质量标准 |
install | 安装 | 安装项目包到本地仓库,这样项目就可以用作其他本地项目的依赖 |
deploy | 部署 | 将最终的项目包复制到远程仓库中与其他开发者的项目共享 |
- 3 site 构建生命周期
- pre-site : 执行一些需要在生产站点文档之前完成的工作
- site :生成项目的站点文档
- post-site :执行一些需要在站点文档之后完成的工作,并未部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
7.2 插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认Maven在各个生命周期上绑有预设的功能
- 通过插件可以自定义其他功能
xml
<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体插件-->
<plugin>
<!--插件的坐标-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<!--执行操作-->
<executions>
<!--具体执行的操作-->
<execution>
<!--目标-->
<goals>
<!--对main文件夹中的源代码进行打包-->
<goal>jar</goal>
</goals>
<!--生成测试代码时使用-->
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>