Maven
是一个项目管理工具,基于 POM
(Project Object Model
,项目对象模型)的概念,Maven
可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
大白话:Maven
是一个项目管理工具,通过 pom.xml
文件的配置获取 jar
包,而不用手动去添加 jar
包
Maven
是一个项目管理工具,基于 POM
(Project Object Model
,项目对象模型)的概念,Maven
可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
大白话:Maven 是一个项目管理工具,通过 pom. xml 文件的配置获取 jar 包,而不用手动去添加 jar 包
IDEA
本身已经继承了 Maven
,我们可以直接使用,无需安装
以下截图的
IDEA
版本为:2024.1.2
,不同版本的IDEA
界面展示会有不同
create
,就创建好了一个 Maven
项目接下来我们结合项目,介绍 Maven
在项目开发中的作用
Maven
提供了标准的,跨平台(Linux
、Windows
、MacOS
等)的自动化项目构建方式
当我们开发了一个项目之后,代码需要经过编译、测试、打包、发布等流程。每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得麻烦。而 Maven
给我们提供了一套简单的命令阿里完成项目的构建
package
”,就可以完成项目的打包操作打包就是把所有的 class
文件,全部放在一起,打成 jar
包或者 war
包
jar
和 war
包是一种压缩文件jar
包就是把开发人员已经写好的一些代码进行打包。打包好的 jar
包就可以进入到其他项目中,也可以直接使用这些 jar
包中的类和属性jar
包,这样的包就可以通过 java -jar
命令来执行war
包可以理解为是一个 web
项目,里面是项目的所有东西,通常用于网站上面说到,Maven
是一个项目管理工具,通过 pom.xml
文件的配置获取 jar
包,而不用手动去添加 jar
包获取的 jar 包,其实就是依赖
pom.xml
就是Maven
的配置文件,用以描述项目的各种信息
依赖:指当前项目运行时所需要的 jar
包
比如 JDBC
,我们需要手动下载 mysql-connector-java
的包,并且添加到项目中
如果使用 Maven
,我们只需要在 pomxml
中引入 mysql-connector-java
的依赖就可以了
<dependencies>
<!--里面放置项目的依赖坐标,可以为多个-->
</dependencies>
pom
文件 <dependencies>
标签内,添加依赖坐标<dependencies>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependencies>
早期我们没有使用 Maven 时,向项目中添加依赖的 jar 包,需要把所有的 jar 包都复制到项目工程下。
比如,A 依赖 B,B 依赖 C,那么 A 项目引入 B 的同时,也需要引入 C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的
但如果是使用 Maven 的话,就可以避免管理所需依赖的关系。我们只需要在 pom 文件中,定义直接依赖就可以了。由于 Maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也一起导入
Maven 会把在引入一个依赖的时候,会一起把实现这个功能所需要的依赖也一起自动引入
这里引入 mysql,进行打包,protobuf 就是连带的依赖,需要一起引入
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
</dependencies>
项目 A
,依赖一个项目 B
和一个 jar
包 A
jar
包 A
依赖 jar
包 B
、jar
包 C
B
里面是各种依赖,其中也用到了 jar
包 C
但是两边都需要引入 jar 包 C,此时我们在哪边进行引入?
一般 jar 包都是向下兼容,高版本可以兼容低版本
最短路径法:
看项目 A
到两个 jar
包 C
放入路径,哪个更短就用哪个
jar
包而右边的 jar
包 C
版本比左边的低,无法兼容左边的高版本 jar
包 C
。此时就需要将右边的 jar
包 C
从 1.0
升级成 2.0
,此时就可以进行指定依赖
1.0
的 jar
包 C
给排除掉2.0
的 jar
包 C
了,我们在根据路径找 jar
包 C
的时候,就只能找到 2.0
的 jar
包 C
了虽然在上面的图片中看起来是有结构的,谁依赖谁。但是放在项目中,都是平铺直叙的,都是放在一起用的
enclusions
就是排除一些依赖,不会默认把相关的所有依赖都进行引入
上面引入依赖的时候,主依赖和相关依赖都是从网上下载的。需要排除一些依赖,就将网上的地址给出来
当项⽬⽐较复杂时,我们就会有 Jar 包冲突的问题,这时候就需要去解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使⽤ Maven Help 插件来观察包和包之间的依赖关系
Exclude
这个代码,我们称之为“坐标”,也就是唯一的
在 Maven
中,根据 groupId
、artfactId
、version
的配置,来唯一识别一个 jar
包,缺一不可。当我们在 pom
文件中配置完依赖之后,点击刷新, Maven
就会根据坐标的位置,去仓库里寻找 jar
包,并把它下载下来,添加到项目中,这个 jar
包下载的地方就叫仓库
仓库:用来存储资源,管理各种 jar
包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
Maven
仓库分为两种:
全球唯一,地址为: https://repo1.maven.org/maven2/springframework/
里面东西太多了,不好找。可以在这里面进行快速查找: https://mvnrepository.com
Maven 版本选择哪个?
jar 包下载路径
本地仓库原来是空的,随着使用,里面的包越来越多(从中央仓库下载过来的)
中央仓库里面的包是全世界的都可以看到,而有一些不想公开的 jar 包就放在私服中(私有服务器)
因为中央仓库在国外,所以下载起来会⽐较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源
阿里云就相当于是把中央仓库弄了一个镜像,放在了国内,并公开给人用
如果路径中有中文,修改一下 Maven 本地仓库路径