0%

Maven

Maven

1.maven基本概念

1.1 仓库

仓库:用来存储资源,包含各种jar包

仓库分类:

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
  • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
    • 中央仓库:Maven团队维护,存储所有资源的仓库
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

私服的作用:

  • 保存具有版权的资源,包含购买1或者自主研发的jar包
    • 中央仓库的jar都是开源的,不能存储具有版权的资源
  • 一定范围内共享资源,仅对内部开放,不对外部共享

1.2 坐标

什么是坐标?

Maven中的坐标就是用于描述仓库中资源的位置

==Maven坐标的主要组成==

  • groupId:定义当前maven项目隶属于组织名称(通常是域名反写,例如:org.mybatis)
  • artifactId:定义当前maven项目名称(通常是模块名称(在项目中定义了一个wpeng.service,那么工件id就是wpeng.service),例如CRM,SMS,)
  • version:定义当前项目版本号
    • ==packaging:定义该项目的打包方式,但是不属于maven的坐标==

Maven坐标的作用:

​ 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

1.3 仓库配置

maven默认的本地仓库是在c盘用户目录下面,但是过多资源会使c盘容量骤减,所以我们自己配置

本地仓库配置:找到apche-maven的conf目录,点进去修改setting.xml,它本地资源位置被使通过注释来配置的,所有我们要提取

1
2
3
4
5
6
7
  <!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\Maven\apache-maven-3.6.1-bin\apache-maven-3.6.1\mvn_repo</localRepository>

自己提取locaRepository标签放在外面,标签里面的填上你想存放maven本地仓库位置的目录位置

镜像仓库配置:setting.xml配置文件中找到mirror

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

配置了阿里云仓库

全局setting与用户setting区别

  • 全局setting定义了当前计算机中Maven的公共配置
  • 用户setting定义了当前用户的配置

2.依赖管理

2.1 依赖配置

依赖是指当前项目运行所需要的jar,一个项目可以设置多个依赖

2.2 依赖传递

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

https://www.freeimg.cn/i/2024/06/01/665b26f58932f.jpg

==比如说我在project02的pom文件中加入了一个依赖,这个依赖的坐标是我project03的pom文件的坐标==

依赖传递当中的冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

2.3 可选依赖

可选依赖指对外隐藏当前所依赖的资源—-不透明

在maven坐标里面加一个option标签

1
2
3
4
5
6
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
<optional>true</optional>
</dependency>

2.4 排除依赖

排除依赖:主动断开依赖的资源,被排除的资源无需指定版本

https://www.freeimg.cn/i/2024/06/01/665b2a70e572b.jpg

2.5 依赖范围

依赖的jar默认情况是可以在任何地方使用,可以通过scope标签设定其作用范围

作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)

https://www.freeimg.cn/i/2024/06/02/665c248f04164.jpg

依赖范围传递性

带有依赖范围的资源在进行传递时,作用范围将受到影响

https://www.freeimg.cn/i/2024/06/02/665c248ef0bb3.jpg

3.生命周期与插件

3.1 构建生命周期

Maven构建生命周期描述的是一次构建过程经历经历了多个个事件

Maven对项目构建的生命周期划分为3套

  • clean:清理工作
  • default:核心工作,例如编译,测试,打包,部署等
  • site:产生广告,发布站点等

clean生命周期:

  • pre-clean 执行一些需要在clean之前完成的工作
  • clean 移除所有上一次构建完成的文件
  • post-clean 执行一些需要在clean之后立刻完成的工作

default生命周期

https://www.freeimg.cn/i/2024/06/02/665c757a12937.jpg

site:

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定服务器上

3.2 插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行的插件功能
  • 默认Maven在各个生命周期上绑定有预设功能
  • 通过插件可以自定义其他功能

4.Maven高级

4.1 分模块开发与设计

ssm_pojo

1.新建模块

2.只留下实体类,可以删除test目录和main下的resource目录

ssm_dao

1.新建模块

2.main目录和test目录都不要删,要删除某些不需要的配置文件

https://www.freeimg.cn/i/2024/06/02/665c757a1fb4e.jpg

ssm-service

https://www.freeimg.cn/i/2024/06/02/665c7579db032.jpg

ssm_controller

https://www.freeimg.cn/i/2024/06/02/665c757a1d94b.jpg

4.2 聚合

多模块构建维护

问题:https://www.freeimg.cn/i/2024/06/02/665c766d45458.jpg

比如dao层改变,需要重新install,但是其他几个模块不变,会导致数据不同步

==建立一个模块,管理其他模块,当这个模块做任何行为时,其他模块也做一样的行为==

这个模块只需要留一个pom文件,在pom文件的坐标下,加上pom标签,定义该工程用户进行构建管理

使用modules标签

https://www.freeimg.cn/i/2024/06/02/665c7cc6a5ec0.jpg

https://www.freeimg.cn/i/2024/06/02/665c7cc601c41.jpg

4.3 继承

https://www.freeimg.cn/i/2024/06/02/665c8a5b2b567.jpg

https://www.freeimg.cn/i/2024/06/02/665c8a5b481e9.jpg

https://www.freeimg.cn/i/2024/06/02/665c8a5b82735.jpg

4.4 属性定义与使用

在pom文件中定义属性,==本质上就是定义变量,使用变量进行赋值,防止硬代码的出现==

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

<spring.version>5.1.9.RELEASE</spring.version>
<dubbo.version>2.7.4.1</dubbo.version>
<zookeeper.version>4.0.0</zookeeper.version>
</properties>



<!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!--ZooKeeper客户端实现 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<!--ZooKeeper客户端实现 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${zookeeper.version}</version>
</dependency>

4.5 版本管理

https://www.freeimg.cn/i/2024/06/02/665c92d36af20.jpg

https://www.freeimg.cn/i/2024/06/02/665c92d35dbd0.jpg

4.6 资源配置

https://www.freeimg.cn/i/2024/06/02/665c9618d2cef.jpg

4.7 多环境兼容

https://www.freeimg.cn/i/2024/06/03/665d3d34518ec.jpg

4.8 跳过测试

跳过测试的应用场景:

  • 整体功能模块未开发
  • 模块中某个功能未开发完毕
  • 单个功能更新调试导致其他功能失败
  • 快速打包
  • …….

https://www.freeimg.cn/i/2024/06/03/665d3d34174f7.jpg

5.私服

idea环境中资源上传与下载