Maven基础笔记
Maven基础
一. 简介
Maven的作用:
项目构建:提供标准的、跨平台的自动化项目构建方式
依赖管理:方便快捷的管理项目依赖资源(jar包),避免资源之间的版本冲突问题
统一开发结构:提供标准的、统一的项目结构
每一个项目都对应一个项目对象模型(POM),一个项目对象模型通过一份pom.xml文件进行管理,同时依赖管理可以管理项目中需要的依赖。本身这个项目也可以作为一个资源供其他项目作为依赖使用。
二.基础概念
1. 仓库
仓库:用于存储资源,包含各种jar包
仓库的分类:
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:非本地电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护的,存储所有资源的仓库
- 私服:部门或公司范围内部存储资源的仓库,从中央仓库获取资源
私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar包
- 一定范围内共享资源,仅对内部开放,不对外共享
2. 坐标
坐标:Maven中的坐标用于描述仓库中资源的位置
主要组成:
- groupId:定义当前Maven项目隶属组织的名称(通常是域名反写,org.mybatis)
- aritfactId:定义当前Maven项目的名称,通常为模块名称
- version:当前项目版本号
- packaging:当前该项目的打包方式
搜索:Maven Repository: Search/Browse/Explore (mvnrepository.com)
作用:使用唯一标识来定位资源的位置,通过该表示可以将资源的识别与下载工作交由机器来完成
本地仓库的配置,在conf里面的setting中配置
阿里云maven:
1
2
3
4
5
6
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
三.手工制作Maven项目
Maven工程目录结构:
1 |
|
java
文件夹中防止类代码- 在
src
同层目录中创建pom.xml
Maven项目构建命令:
1 |
|
可以插件创建Maven项目
四.IDEA生成Maven项目
通过配置在IDEA中的设置进行Maven项目的生成
五.依赖管理
1.依赖配置
依赖配置:配置当前项目需要的jar包,一个项目可以设置多个依赖
1 |
|
2.依赖传递
依赖传递:使用其他人的资源的时候,那个资源有用到的jar包,当前项目中也能够使用
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,那么当前项目间接依赖其他资源
依赖冲突三原则(决定使用哪一个依赖)
- 路径优先:当依赖中出现了相同资源的时候,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级的时候,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同一配置文件中了相同资源的不同版本,后配置的覆盖先配置的
3.可选依赖
可选依赖指对外隐藏当前资源所需要的依赖(对外不透明)
当前项目中配置可选依赖,当其他项目使用当前项目作为资源的时候,其他项目无法看到依赖。
使用optional
关键字
1 |
|
4.排除依赖
排除依赖指主动断开依赖的资源,被排除的依赖无需指定版本(自己不需要)
当前项目中配置排除依赖,则当前项目中就看不到对应使用资源的依赖
使用exclusions
和exclusion
关键字
1 |
|
5.依赖范围
依赖范围:使用scope
关键字,用来指定依赖的允许使用范围,分为以下的范围:
- 主程序范围内有效(main文件夹范围)
- 测试程序范围内有效(test文件夹范围)
- 是否参与打包(package指令范围内)
scope | 主代码 | 测试代码 | 打包 |
---|---|---|---|
compile(默认) | √ | √ | √ |
test | √ | ||
provide | √ | √ | |
runtime | √ |
依赖范围有特殊的传递性:带有依赖范围的资源在进行传递的时候,作用范围会受到影响:
下面是对scope各种取值的相关解释:
compile
:为默认的依赖范围,该依赖在编译、运行和测试时均有效provide
:在编译、测试时有效,但是在运行时无效。例如servlet-api,运行项目的时候容器已经提供了,就不需要重复引入runtime
:在运行、测试时有效,在编译时无效。例如JDBC驱动实现,项目代码编译仅需要JDBC接口,只有在测试或者运行项目的时候才需要实现接口的具体驱动test
:只在测试时有效
六.生命周期与插件
项目构建生命周期:Maven构建生命周期描述的是一次构建过程中经历了多少个事件。Maven对项目构建的生命周期划分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,部署等
- site:产生报告,发布站点等
插件:
- Maven生命周期的每一个阶段的具体实现都是由Maven插件来实现的。而Maven实际上是一个依赖插件执行的框架
- 插件与生命周期内的阶段绑定,在执行到对应生命周期的时候会执行对应的插件功能
- 默认maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义功能