环境准备:
需要检查Idea版本(社区版)是否在下面的范围内:
社区版:2021.1 ~ 2022.1.4
专业版:无要求
如果安装的idea不在这个范围内,需要卸载重新安装
卸载参考(一定要删除注册表):彻底卸载并重装IntelliJ IDEA指南-CSDN博客
1、Maven
1.1 什么是Maven
以下是官方文档对Maven的描述:
Apache Maven is a software project management and comprehension tool. Based on the
concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
引用于 : 欢迎使用 Apache Maven -- Maveg
简单翻译下:Maven是一个项目管理工具,提供pom.xml文件的配置获取jar包,而不用手动地添加jar包。
1.2 为什么要学Maven
简单、方便、提高我们的开发效率,减少我们开发的Bug。
Maven提供的功能非常多,在后续的学习中体现在以下两个方面:
1、项目构建
2、管理依赖
1.3 创建Maven项目
Idea本身已经集成了Maven,我们可以直接使用,无需安装。
新建项目,将构建系统改为Maven,创建即可~
如图,就创建好了一个Maven项目:
1.4 Maven的核心功能
我们刚才提到过Maven在项目开发中的作用:
1、项目构建
2、管理依赖
1.4.1 项目构建
Maven提供了标准的,跨平台的自动化项目构建方式。
当我们开发了一个项目之后,代码需要经过编译、测试、打包、发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,会特别麻烦,而Maven给我们提供了简单的命令来完成项目的构建。
比如,点击package就可以完成项目的打包操作:
打包就是把所有的class文件,全部放在一起,打成jar包或者war包。
jar包和war包都是⼀种压缩⽂件
jar包就是把开发⼈员已经写好的⼀些代码进行打包. 打好的jar包就可以引⼊到其他项⽬中, 也可以直接使用这些jar包中的类和属性. 另外也可以打成可执行jar包, 这样的包就可以通过java -jar命令来执行。
war包可以理解为是⼀个web项目,里面是项目的所有东西, 通常用于网站.
1.4.2依赖管理
上面说完了Maven是一个项目管理工具,提供pom.xml文件的配置获取jar包,而不用手动去添加jar包,获取到的jar包,其实就是依赖。
pom.xml就是maven的配置文件,用于描述项目的各种信息
比如在前面学习JDBC时,我们需要手动下载mysql-connector-java的包,并且添加到项目中。
如果使用Maven,我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了。
1、使用<dependencies>打包依赖
XML
<dependencies>
<!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
</dependencies>
2、在pom文件的<dependencies>标签内,添加依赖坐标
XML
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
groupId:代表项目所属组织活分组,通常使用反向域名的形式。
artifactId:表示具体的项目或者模块名称。
version:指定该artifact的版本号。

3、点击刷新按钮,引入新加入的依赖jar包
刷新完之后就可以在项目中看到新加入的jar包:
依赖传递
细心的同学可能就发现了:怎么上面还有一个protobuf的包呢?
这是因为依赖传递。
早期我们没有使用maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。比如 A 依赖B, B依赖C, 那么 A项目引入B 的同时, 也需要引入C, 如果我们手动管理这个依赖, 这个过程 就会比较麻烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的。
但使用maven的话, 就可以避免管理所需依赖的关系。我们只需要在pom文件中, 定义直接依赖就可以了, 由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。

如上图,项目A通过Maven引入JarA时,会自动引入JarB和JarC。Jar和项目B就是项目A的直接依赖。JarB,JarC是间接依赖。
依赖排除
当前阶段我们需要依赖的库并不多,但随着项目越来越复杂,库之间1的依赖关系也会变得越来越复杂。如上图,如果项目A不需要JarB,也可以通过排除依赖的方式来实现。
排除依赖:
指主动断开依赖的资源。(被排除的资源无需指定版本)
如下代码就是排除了spring framework的依赖。(即不使用spring framework的jar包了)
XML
<!--排除依赖-->
<exclusions>
<exclusion>
<artifactId>spring-jcl</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
1.4.3 Maven Help插件
当项目比较复杂时,我们就会有Jar包冲突问题,这时候就需要取解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使用MavenHelp插件来观察包和包之间的依赖关系。
在项目创建页面,点击插件,搜索Maven Help,安装即可:
安装之后打开pom文件,就可以看到jar包之间的依赖关系。 还可以右键排除掉一些依赖。
1.5 Maven仓库
我们通过刚才短短几行代码,就把依赖的jar包放在了项目里,具体是怎么做到的呢?
XML
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
这个代码我们称之为"坐标",也就是唯一的(根据我们刚才所讲的groupId、artifactId和version的配置来识别),当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找Jar包,并把它下载下来,添加到项目中。这个Jar包下载的地方就称为仓库。
Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包, 插件等)(可以理解为:菜鸟驿站)。
Maven仓库可以分为两大类:本地仓库 和远程仓库。 其中远程仓库又分为中央仓库 、私服和其他公共库。
1.5.1 本地仓库
本地仓库:自己计算机上的一个目录(用来存储jar包)
当项目引入了对应依赖的jar包之后,首先会在本地仓库中是否有对应的jar包:如果有,就会在项目中直接引用,如果没有才会去中央仓库下载对应的Jar包。

本地仓库地址可以通过Maven配置查看:
该仓库的目录最开始是空的,随着Maven的使用,该仓库下的文件会越来越多。
1.5.2 中央仓库
中央仓库:maven软件中内置的一个远程仓库地址,服务于整个互联网。由Maven团队维护,全球唯一。(由于该仓库在国外,访问速度较慢)。
仓库地址:Central Repository: (maven.org)
如果觉得查找jar包麻烦,我们也可以通过下面的网址来查找jar包的坐标:Maven 存储库:搜索/浏览/探索 (mvnrepository.com)
例如:查找mysql:
选择要添加的Jar包版本(这里最好选择次新的、使用人数多的、无漏洞的):
查看Jar包对应坐标:
1.5.3 私有服务器(私服)
私服:一般由公司团队搭建的私有仓库。属于某个公司,或者某个部门,往往需要一定的权限。
有了私服之后,Maven依赖下载的顺序又发生了变化。
当Maven需要下载资源的时候:
1、先从本地仓库获取,本地仓库存在,则直接返回。
2、如果本地仓库没有,就从私服找,找到了就返回。
3、如果私服上也不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了。
4、如果中央仓库中存在,就先缓存到私服上之后,再缓存到本地仓库里,再为Maven的下载请求服务。(由于私服是很多人使用的,所以只需要第一个使用者下载一次就可以了,因此进入公司就可以找前辈要公司私服的权限)。
1.6 Maven设置国内源
因为中央仓库在国外,所以下载起来比较慢,所以咱们选择借助国内一些公开的远程仓库来下载资源(如:阿里云、华为云......)。
1.6.1 配置设置文件和本地仓库
1、先在D盘新建一个maven文件夹.
2、在C盘中查找本机Maven仓库的地址 (一般为C:/用户./UserName./m2),将它复制粘贴到我们刚才的Maven文件夹中。

3、 配置Setting文件,如果没有可以去博主的码云中复制一份,然后粘贴到自己的文档编辑器中,保存到刚才的Maven即可。
Setting文件地址:setting.xml · 寻梦缘/Maven配置文档 - 码云 - 开源中国 (gitee.com)

4、在idea中配置本地仓库和setting文件 (选择我们刚才D盘中Maven文件夹的路径即可)
