一.概述
1.关于
Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
基于项目对象模型(Project Object Model , 简称: POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
2.功能
(1)依赖管理
可以通过配置maven项目的pom.xml文件即可
方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
(2)统一项目结构
① 概述
不同的编辑器会有不同的目录,而Maven提供标准、统一的项目结构。方便项目可以在不同编辑器中无缝切换
(3)项目构建
maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式,让我们可以用一套简单的命令来完成项目的构建
提供的功能:
- 清理
- 编译
- 测试
- 打包
- 发布
3.Maven模型
① 项目对象模型
Ⅰ.概述
可以通过pom.xml中的简单描述信息描述项目对象工程,将我们自己的项目抽象成一个对象模型,有自己专属的坐标
Ⅱ.坐标
坐标由
,
,
组成
例如:
junit
junit
3.8.1
② 依赖管理模型
可以通过编辑pom.xml
,使用坐标描述当前项目依赖哪些第三方依赖,使其可以自动导入
③ 构建生命周期/阶段
通过提供各种插件来完成项目的构建
4.Maven仓库
仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件
仓库:用于存储资源,管理各种jar包
(1)分类
Maven仓库分为:
- 本地仓库:自己计算机上的一个目录(用来存储jar包)
- 中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库
(2)查找顺序
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包
-
如果有,则在项目直接引用
-
如果没有,则去中央仓库中下载对应的jar包到本地仓库
如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库
二.安装
三.IDEA集成Maven
1.配置Maven环境
(1)Idea配置Maven信息
一定要回到Idea的主界面去配置,因为这样是全局配置,可以一劳永逸。
回到Idea的主界面点击自定义 -> 所以设置 -> Maven进行配置
配置下面的信息
- Maven主路径
- Maven的安装路径
- 用户配置信息
- 安装路径 -> conf -> settings.xml
- 本地仓库
- 手动创建的,一般设置到Maven安装目录下即可
2.Maven项目
(1)新建项目
这是Maven的默认Archetype,它会生成一个简单的Maven项目结构,包含一个Java源代码目录、一个资源目录以及必要的Maven配置文件。(自定义好复杂,暂时不玩先)
设置Archetype时直接下拉选择org.apache.maven.archetypes:maven-archetype-quickstart
即可
(2)目录结构
目录说明:
- src/main/java: java源代码目录
- src/main/resources: 配置文件信息(需手动创建)
- src/test/java: 测试代码
- src/test/resources: 测试配置文件信息(需手动创建)
- target:编译、打包生成文件的目录(第一次编译后出现)
3.Pom的配置
POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。通过使用pom.xml
实现
(1)pom文件详解
-
:pom文件的根标签,表示当前maven项目 -
:声明项目描述遵循哪一个POM模型版本- 虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0
- 坐标 :
、 、 - 定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
-
:maven项目的打包方式,通常设置为jar或war(默认值:jar)
① 坐标
Ⅰ.概述
资源,可以是插件、依赖、当前项目
- Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
- 可以使用坐标来定义项目或引入项目中需要的依赖
Ⅱ.坐标的组成
-
groupId
:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.honestliu) -
artifactId
:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service) -
version
:定义当前项目版本号
使用坐标表示logback:
ch.qos.logback
logback-classic
1.2.11
四.依赖管理
1.依赖配置
就是当我们需要用到第三方包的时候的导入的包
依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖
(1)配置过程
① 找到坐标
-
利用中央仓库搜索的依赖坐标,到mvn的中央仓库(https://mvnrepository.com/)中搜索
-
利用IDEA工具搜索依赖,利用
Alt + Insert
快捷键,在弹出的工具狂里面搜索 -
熟练上手maven后,快速导入依赖
简单说,就是用到Idea都记住你会调用什么依赖的时候,就会直接提示你了。
② 通过坐标添加
添加步骤:
1.到Maven项目的pom.xml文件中的既有的
下,将下面的坐标信息进行添加
示例坐标:
ch.qos.logback
logback-classic
1.2.11
2.点击右上角的悬浮窗,重新加载Maven项目即可
- 之后就可以在右侧Maven菜单栏中看到自动添加进来的logback依赖了
2.依赖传递
(1)概述
有些依赖(jar包)也是要依赖其它jar包的,所以在使用它们的时候往往要把其本体及其依赖的jar包一并导入到项目中
(2)分类
-
直接依赖:在当前项目中通过依赖配置建立的依赖关系
-
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
(3)Maren中的依赖传递
① 体现
在Maren中,添加依赖配置的时候可以只添加目标要使用的依赖,而不必考虑其本身依赖的其它jar包。
② 原理
Maren导入依赖的时候,会把其所依赖的其它jar包也一起进行导入
例如:在pom.xml文件中只添加了logback-classic依赖,但由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。
3.排除依赖
(1)概述
依赖具有传递性,但有时候传递过来的依赖是我们不需要的,此时就可以尝试将其进行排除操作了
**排除依赖:**指主动断开依赖的资源。
(2)格式
在
下的
内添加要排除的依赖资源的坐标(被排除的资源无需指定版本)
com.honestliu
maven-projectB
1.0-SNAPSHOT
junit
junit
(3)例子
maven-projectA依赖了maven-projectB,maven-projectB依赖了Junit。基于依赖的传递性,所以maven-projectA也依赖了Junit
使用排除依赖后
4.依赖范围
(1)概述
默认情况下,在项目中导入依赖的jar包后,是可以在任意地方使用的
(2)限制范围
将其添加到要限制访问范围的依赖pom配置里面
限制标签:
不同scope标签表示的访问范围:
-
主程序范围(main文件夹范围内)
-
测试程序范围(test文件夹范围内)
-
是否参与打包运行(package指令范围内)
scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
(3)例子
给junit依赖通过scope标签指定依赖的作用范围是test,则其只能在test目录下的测试代码中使用了
junit
junit
3.8.1
test
5.生命周期
(1)概述
**项目构建的生命周期:**是一个项目从概念到完成所经过的所有阶段
(2)Maven的生命周期
① 概述
Maven就是一个插件的框架
Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。
在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。
② 划分
Ⅰ.简述
Maven对项目构建的生命周期划分为3套==(相互独立)==:
-
clean:清理工作。
-
default:核心工作。如:编译、测试、打包、安装、部署等。
-
site:生成报告、发布站点等(少用)
Ⅱ.各周期完整阶段
Ⅲ.常用的生命阶段
Clean生命周期:
- clean:移除上一次构建生成的文件
default生命周期
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如:jar、war等
- install:安装项目到本地仓库
③ 使用生命周期
注意:在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。
Ⅰ.Idea的Maven工具栏
IDEA右侧的maven工具栏中,已给出快速访问通道
Ⅱ.命令行中执行
在项目目录下执行Maren指令一样可以使用对应的生命周期
命令:mvn 生命周期名称
五.附录
1.更新Maven仓库信息
有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下:
打开设置----搜索maven----Repositories----选中本地仓库-----点击Update