目录
1. 环境准备
社区版:2021.1 - 2022.1.4
专业版:无要求
2. Maven
2.1 什么是Maven
Maven是一个项目管理工具。基于POM(Project Object Model,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
大白话就是:Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不是手动去添加java包。
2.2 为什么要学Maven
原因:简单,方便,提高我们的开发效率,减少我们的开发Bug。
Maven提供的功能非常多,Maven主要体现在两个方面:
- 项目构建
- 管理依赖
2.3 创建一个Maven项目
IDEA本身就已经集成了Maven,可以直接使用,不需要安装。
File->New -> Project
点击Create,就创建好了一个Maven项目。
2.4 Maven核心功能
主要两个方面:
- 项目构建
- 管理依赖
2.4.1项目构建
Maven提供了标准的,跨平台的自动化项目构建方式。
当我们开发了一个项目之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,而Maven给我们提供了一套简单的指令开完成项目的构建。
比如,点击package,就可以完成项目的打包操作。
打包就是把所有的class文件,全部放在一起,打成jar包或者war包。
jar包和war包都是一种压缩文件。
jar包就是把开发人员已经写好的一些代码进行打包。打好的jar包就可以引入到其他项目中,也可以直接使用这些jar包中的类和属性。另外也可以打成执行jar包,这样的包就可以通过java-jar命令执行。
war包可以理解是一个web项目,里是项目的所有东西,通常用于网站。
2.4.2 依赖管理
上面说到,Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不是手动去添加获取的jar包,其实就是依赖。
pom.xml就是maven的配置文件,用以描述项目的各种信息。
依赖配置
依赖:指当前项目运行所需要的jar包。
我们需要手动下载Mysql-connector-java的包。并添加到项目中。
如果使用Maven,我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了。
<dependencies>
<!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
</dependencies>
1.在pom文件<dependencies>标签内,添加依赖坐标。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
2.点击刷新按钮,引入新加入的依赖jar包。
后续添加新的jar包,或者修改jar包版本,都需要通过该方式再项目中添加依赖。
3. 刷新完之后,就可以在项目中看到新加入的jar包。
依赖传递
如上图,项目A通过Maven引入Jar A时,会自动引入jar B和Jar C。
Jar A和项目B就是项目A的直接依赖。
JarB,JarC是间接依赖。
直接依赖:在当前项目中通过依赖配置建立的依赖关系。
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。
依赖排除
当前接待你我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也变得越来越复杂。如上图中,如果项目A不需要Jar B,也可以通过排除依赖的方式来实现。
排除依赖:
指主动断开依赖的资源。(被排除的资源无需指定版本)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.0.6</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<artifactId>spring-jcl</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
Maven还有一些功能是依赖调节,可选依赖等
依赖调解:
当项目中的依赖存在依赖冲突时,例如 存在这样的场景:
A->B->C->X(1,0)
A->D->X(2,0)
Maven会采用最短路径优先的原则去选择依赖,这里2的依赖路径更短,所以会选择x(2,0),当然也可以选择制定某个依赖的版本。
当然也可以指定X的版本。
2.4.3 Maven Help插件
当项目比较复杂时,我们就会有jar包冲突的问题,这时候哦就需要去解决依赖冲突,解决冲突之前,先要找到冲突,我们可以使用Maven Help插件来观察包和包之间的依赖关系。
插件就是对程序的一些特定场景,做出一些特定的功能的扩展。
安装插件:File-Settings-Plugins->搜索‘Maven Help’->找到对应插件,点击Install安装即可,安装后需要重启下IDEA,才能生效。
安装之后,打开pom文件,就可以看到jar包之间的依赖关系。
也可以右键排除一些依赖。
2.5 Maven仓库
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
这个代码,我们称之为“坐标”,也就是唯一的。
在Maven中,根据groupId,artifaxtId,version的配置,来识别一个jar包,缺一不可。
当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找Jar包,下载下来,添加到项目中,这个jar包下载的地方就称为仓库。
仓库:用于存储资源,管理jar包。
Maven仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。
Maven仓库分为两大类:本地仓库和远程仓库。其中远程仓库又分为中央仓库,私服和其他公共库。
2.5.1 本地仓库
本地仓库:自己计算机上的一个目录(用来存储jar包)。
当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包。
- 如果有,则在项目中直接引入。
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库。
在本地仓库地址可以通过Maven配置查看:
File->Settings
查看该仓库目录,就可以看到该目录下有很多的jar包(最开始是空的,随着Maven的使用,该仓库下文件会越来越多)。
2.5.2 中央仓库
中央仓库:maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网,由Maven维护,全球唯一。
仓库地址:https://repo1.maven.org/maven2/
我们可以通过https://mvnrepository.com这个网站来查询并下载。
我们可以把自己写好的jar包上传到中央仓库(具备一定的要求),也可以从中央仓库下载jar包。
查找jar的坐标
- 访问https://mvnrepository.com/
- 进行查找,比如mysql
3. 选择要添加的jar包版本
4. 查看jar包对应坐标
2.5.3 私服服务器,也称私服
私服:一般由公司团队搭建的私有仓库。
私服属于某个公司,或者某个部门,往往需要一定权限。
有了私服之后,Maven依赖下载的顺序又发生了变化。
当Maven需要下载资源的时候
- 先从本地仓库获取,本地仓库存在,则直接返回。
- 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回。
- 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了……
- 如果中央仓库中存在,就先缓存在私服上之后,在缓存到本地仓库里,再为Maven的下载请求提供服务。
私服是很多人都在使用的,所以只需要第一个使用者下载一次就可以了。
2.6 Maven设置国内源
因为中央仓库在国外,所以下载起来会比较慢,多一选择国内一些公开的远程仓库来下载资源。
2.6.1 配置当前项目setting
File->Settings
1. 查看配置文件的地址,如上图所示,Maven配置文件地址为:D:\Maven\.m2\settings.xml
不同电脑设置的Maven路径不同。
settings和repository可以修改设置为其他路径,两个路径不要有中文。
2.配置国内源
Maven仓库默认在国外https://mvnrepository.com/,国内使用会比较慢,我们可以更换为阿里云的仓库。
打开setting.xml,在mirrors节点上,添加内容如下:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿⾥云公共仓库</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
如果上述地址不存在settings文件,则直接复制即可。
2.6.2 设置新项目的setting
上述配置的内容,只对当前项目生效,为了让后续新建的项目也生效,需要重新设置一下新项目的settings。