一、Maven是什么?
Maven 本质上是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目 标的逻辑,就是用XML描述一个项目的信息(主要是项目依赖jar,插件,仓库等等)。
二、Maven的作用
1、项目构建:提供标准的、跨平台的自动化项目构建方式
2、依赖管理:方便快捷的管理项目依赖的资源(jar包) ,避免资源间的版本冲突问题
3、统一开发结构:提供标准的、统一的项目结构
三、Maven的下载、安装和使用
1、官网下载地址
https://maven.apache.org/download.cgi
2、下载压缩包解压可用
解压后目录结构如下:
bin:存放了maven 的命令,比如我们前面用到的 mvn tomcat:run
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
3、需要预装JDK环境,并配置JAVA_HOME环境变量
配置 MAVEN_HOME ,变量值就是你的 maven 安装的路径(bin 目录之前一级目录)
上面配置了我们的 Maven 软件,注意这个目录就是之前你解压 maven 的压缩文件包在的的目录,最好不要有中文和空格,其次打开path环境变量在value后面添加:%MAVEN_HOME%\bin
4、测试:通过 mvn -v命令检查 maven 是否安装成功
四、Maven基本概念
4.1、Maven仓库
用于存储资源,包含各种jar包。
仓库分为:本地仓库、私服仓库、中央仓库
(1)本地仓库:存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包优先从本 地仓库 查找默认本地仓库位置在 ${user.home}/.m2/repository,
本地用户目录:D:\mavenCangKu\repository
(2)私服仓库:保存具有版权的资源,包含购买或自主研发的jar,公司单独开发的私有jar可放置到私服中。(使用私服为了减少对中央仓库的访问时间,提高开发效率)
(3)中央仓库:服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包它包含了世界上大部分流行的开源项目构件,工程依赖的jar包如果本地仓库没有,默认从中央仓库下载。
4.2、Maven坐标
用于描述仓库中资源的位置
可通过https://mvnrepository.com/下载需要的坐标
<project>
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
Maven坐标主要组成
groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version:定义当前项目版本号
packaging:定义该项目的打包方式
Maven坐标的作用:
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
4.3、仓库配置
4.3.1 本地仓库配置
4.3.2 远程仓库配置
4.3.2 镜像仓库配置
五、Maven依赖管理
依赖:指当前项目运行所需的jar,一个项目可以设置多个依赖
<!-- 设置当前项目所依赖的所有jar-->
<dependencies>
<!--设置具体依赖-->
<dependency>
<!--依赖所属群组-->
<groupId>junit</groupId>
<!--依赖所属项目-->
<artifactId>junit</artifactId>
<!--依赖版本号-->
<version>4.12</version>
</dependency>
</dependencies>
依赖传递:依赖具有传递性
分类:
1、直接依赖:在当前项目中通过依赖配置建立的依赖关系
2、间接依赖: 被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
如何解决依赖传递冲突问题 :
1、最短路径优先原则
2、路径相同先声明原则
3、特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的