Maven基础应用
概述
1 简介
背景:我们在做项目时。一个项目中常常有许多的不同种类的文件,难以管理。在多人开发一个项目时,每个人的项目结构也不一样,对于后期的整合也是一个大问题。在我们开发时,会用到许多的依赖,那么对于依赖的导入和管理也是一个棘手的问题。在这样的背景下,出现了许多的项目管理工具。现在常用的便是Maven。
Maven:由背景我们就能知道Maven是一个项目管理工具。
2 作用
- 项目构建:提供骨架,便于开发者统一项目结构,便于开发。
- 依赖管理:Maven能够方便快捷的管理依赖。
- 提供标准:开发者都Maven,久而言之。Maven便提供了标准的项目结构。
基础概念
1 仓库
仓库就是装东西的。在Maven中,我们要仓库有什么用?仓库在哪里?
在背景中已经提到,Maven可以管理依赖。所以能够猜测出仓库就是用来存放依赖。
仓库的分类:
远程仓库:非本机上存储依赖的仓库。连接本地仓库,为本地仓库提供依赖。
分类:
- 中央仓库:由Maven开发人员管理和维护,里面拥有绝大部分的开源依赖
- 私服:由企业或个人创建的远程仓库。从中央仓库获取依赖,或者自己上传依赖。
本地仓库:本机上用于存储依赖的仓库。
- 私服用来存储自己研发的依赖,保护自己的版权。
- 用于团队直接互相传递自己研发的依赖。
下图为仓库的工作流程图。
本地仓库获取依赖由三种方法:
- 从私服中获取,私服的服务器一般在国内,获取依赖的速度快。
- 直接从中央仓库中获取。但是中央仓库的服务器在国外,获取速度很慢,不推荐使用此方法。
- 自己导入,下载对于的依赖后,手动添加到对于的文件目录下。
2 坐标
坐标就要用来确定位置的。那么在Maven中哪里要用到坐标呢?坐标的出现是为了精确地找到对应的物品。在仓库中,存在着众多的依赖。找起来是十分麻烦。所有就用坐标来定位我们需要的依赖。
Maven坐标的组成部分:
1 | <dependency> |
其中各参数为:
- groupId:定义当前Maven隶属组织名称(通常情况下为域名 反写,如:com.mybatis)
- artifactId:定义当前Maven项目的名称(通常是模块名称,如CRM,SMS)
- version:定义当前版本的版本号
- packaging:定义当前项目的打包方式(如:jar,war)
1 | mvn compile #编译 |
依赖管理
1 依赖传递
分类:
- 直接依赖:当前依赖中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的依赖包如果依赖其他的依赖包,那么当前项目就间接依赖其他依赖包。
如图:
- test2.jar对于test1.jar就是直接依赖
- test3.jar对于test1.jar就是间接依赖
2 可选依赖
可选依赖:对外隐藏自己所依赖的依赖包
- 只需在添加依赖时,添加
<optional>true</optional>
- optional的默认值为false,即不隐藏自己所依赖的jar包
1 | <dependency> |
3 排除依赖
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本
- 在直接依赖下面添加
exclusions
标签 - 如下:在test1中导图test2依赖,但是要断开test3依赖
1 | # 此为test1项目的pom.xml文件 |
4 依赖范围
依赖的jar默认情况下是compile,即任何地方都能使用。但是在实际开发中并不是所有的依赖在所有的地方都有使用。
通过scope标签设定依赖的作用范围
作用范围
全部范围有效
主程序范围有效(main文件范围内)
测试程序范围有效(test文件范围内)
是否参与打包(package指令范围内)
scope | 主代码 | 测试代码 | 打包 |
---|---|---|---|
compile | Y | Y | Y |
test | Y | ||
provided | Y | Y | |
runtime | Y |
- 依赖范围的传递性:只有能够参与打包的依赖才能传递
compile | test | provided | runtime | |
---|---|---|---|---|
compile | compile | test | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | test | provided | runtime |
生命周期
生命周期注意分为三类:
- clean
- default
- site
default周期(重点):
- compile 编译项目的源代码
- test 使用合适的单元测试框架运行测试(junit便是其一)
- package 将编译后的代码打包。格式为jar,war等
- install 安装项目包到本地仓库,可以作为本地项目的依赖
该周期有很多,只说明了其中的常用几个。
clean周期:
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
site周期:
pre-site 执行一些需要在站点生成文档之前的工作
site 生成项目所需要的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
插件
- 插件与生命周期内的阶段绑定,在执行到对应的生命周期时执行对应的插件
- 默认Maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其他功能
导入插件格式如下:
1 | <bulid> |