文章目录
Maven简介
Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
-
提供了一套标准化的项目结构
-
提供了一套标准化的构建流程(编译,测试,打包,发布……)
-
提供了一套依赖管理机制
Maven构建的项目目录是统一的,如下图:
什么是依赖管理?
如果没有Maven的话,在项目中使用某些第三方资源时,就需要去下载对应的jar包
而Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理
如Mysql驱动包:
Maven 工作模式
1.仓库
当我们写好坐标之后,Maven是怎么导入这些依赖jar包的呢?
其实依赖jar包是存储在我们的本地仓库中。而项目运行时从本地仓库中拿需要的依赖jar包。
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:
-
如果有,则在项目直接引用;
-
如果没有,则去中央仓库中下载对应的jar包到本地仓库。
2.坐标
- Maven 中的坐标是资源的唯一标识
- 使用坐标来定义项目或引入项目中需要的依赖
- 坐标查询网站:https://mvnrepository.com/
Maven 坐标主要组成
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
- version:定义当前项目版本号
Maven的基本使用
1.常用命令
(1)compile :编译
- 从中央仓库 / 阿里云下载编译需要的插件的jar包,在本地仓库也能看到下载好的插件
- 在项目下会生成一个
target
目录
(2)clean:清理
- 从阿里云下载清理需要的插件jar包
- 删除项目下的
target
目录
(3)test:测试
该命令会执行所有的测试代码
(4)package:打包
- 从阿里云下载打包需要的插件jar包
- 在项目的
terget
目录下有一个jar包(将当前项目打成的jar包)
(5) install:安装
该命令会将当前项目打成jar包,并安装到本地仓库
2.生命周期
默认的生命周期:
注意:同一套生命周期内,执行后边的命令,前面的所有命令会自动执行
依赖管理
什么是依赖?
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
1.依赖配置
<!--设置当前项目所依赖的所有jar-->
<dependencies>
<!--设置具体的依赖-->
<dependency>
<!--依赖所属群组id-->
<groupId>org.springframework</groupId>
<!--依赖所属项目id-->
<artifactId>spring-webmvc</artifactId>
<!--依赖版本号-->
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
2.依赖传递
A依赖了B和C,B和C又分别依赖了其他jar包,所以在A项目中就可以使用上面所有jar包,这就是所说的依赖传递
直接依赖:
间接依赖:
3.可选依赖
可选依赖指对外隐藏当前所依赖的资源——不透明
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven_03_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递-->
<optional>true</optional>
</dependency>
4.排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本—不需要
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven_04_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖是隐藏当前资源对应的依赖关系-->
<exclusions>
<exclusion>
<groupId>com.itheima</groupId>
<artifactId>maven_03_pojo</artifactId>
</exclusion>
</exclusions>
</dependency>
A依赖B,B依赖C,C通过依赖传递会被A使用到,现在要想办法让A不去依赖C
- 可选依赖是在B上设置
<optional>
,A
不知道有C
的存在, - 排除依赖是在A上设置
<exclusions>
,A
知道有C
的存在,主动将其排除掉。
5.依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境
比如Junit scope设置为test,就只能作用在测试环境