目录
[1. Maven简介](#1. Maven简介)
[2. Maven的功能](#2. Maven的功能)
[(1) 项目构建](#(1) 项目构建)
[(2) 依赖管理](#(2) 依赖管理)
[3. Maven Helper 插件](#3. Maven Helper 插件)
[(1) 概述](#(1) 概述)
[4. Maven 仓库](#4. Maven 仓库)
[(1) 仓库](#(1) 仓库)
[(2) 本地仓库和远程仓库](#(2) 本地仓库和远程仓库)
[5. 配置Maven国内源](#5. 配置Maven国内源)
1. Maven简介
Maven 是一个用于项目管理和构建的自动化工具, 主要用于 Java 项目. 它可以帮助开发者管理项目的构建, 报告和文档.
简单来讲, Maven是一个项目管理工具, 通过pom.xml的文件配置获取jar包, 而不用手动获取.
那我们进行Java开发为什么要学习Maven呢? --> 提高开发效率.
[补充]:
(1) 什么是jar包:
jar包 (Java Archive ("Java存档")) 是一种用于存储Java文件和相关配置文件 的文件格式, 它本质上是一种压缩文件, 以.jar为扩展名. jar包的设计目的是方便将Java程序进行打包, 使得打包后的Java代码更易于管理和部署.
(2) 什么是pom文件:
pom.xml文件是Maven项目的核心文件, 全称为Project Object Model (项目对象模型). 它是一个 XML 格式的文件, 用于++定义 Maven 项目的基本信息, 构建配置, 依赖关系以及项目所使用的插件等重要信息.++ Maven 会根据pom.xml文件中的信息来执行各种项目管理和构建任务.
2. Maven的功能
(1) 项目构建
Maven 提供了标准的, 跨平台的自动化项目构建方式.
当我们开发了一个项目之后, 代码需要经过编译, 测试, 打包, 发布等流程. 每次代码修改之后, 都需要再次经历这些流程. 如果代码反复调试修改, 这个流程就要反复地进行, 十分不方便.
而Maven就给我们提供了⼀套简单的命令来完成.
比如, 我们点击package, 就可以自动完成项目的打包工作:
此时我们查看target文件夹, 其目录下就会多出一个jar包. 这个jar包就是我们刚刚通过package打包创建的.
[补充]:
打包, jar包和war包 是什么?
打包 就是把所有的class文件, 全部放到一起, 打成jar包或者war包 . jar包和war包都是压缩文件的一种.
- jar包就是把开发人员已经写好的代码进行打包. 打好的jar包可以直接引入到其他项目中, 也可以直接使用这些jar包中的类和属性. 也可以打成可执行jar包, 这样的包就可以通过java -jar命令来执行.
- war包可以理解为是⼀个web项目, 里面包含项目中的所有东西, 通常适用于网站的开发.
(2) 依赖管理
[项目依赖]:
什么是依赖? --> 上面说道, Maven是项目管理工具, 通过pom.xml文件中的配置来获取当前项目运行所需要的jar包. 这里 当前项目运行所需要的jar包 就叫做 依赖.
pom.xml 就是Maven的配置文件, 用来描述项目的信息, 管理项目的依赖.
依赖配置:
例如: 我们之前在学习JDBC时, 需要手动 下载 mysql-connector-java 的包并将其手动添加 至项目中. 但是如果我们使用Maven, 只需要在pom.xml中引入 mysql-connector-java 的依赖就可以了.
XML
<dependencies>
<!-- 在里面添加依赖坐标-->
</dependencies>
我们需要在pom.xml文件中的 <dependencies> 标签中添加mysql-connector-java的依赖坐标, 格式如下:
XML
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
添加新的jar包之后, 我们需要 (点击刷新按钮) 刷新Maven 以引入新的依赖. 否则无法引入.
刷新之后, 我们就可以在 Maven -- Dependencies 中查看到我们新添加的依赖了:
[依赖传递]:
在早期不使用Maven管理依赖的jar包时, 如果某jar包还依赖于其他包, 其他包又依赖于另外的包, 那么我们就需要把所有依赖的包一起导入 到项目中, 如果手动操作 这个过程会十分麻烦.
但是如果我们使用Maven就会避免上述麻烦的产生. 因为Maven管理的依赖具有传递性 : ++在导入一个依赖时, 会将这个依赖所依赖的以及和它有传递性的jar包一起导入++ . 也就是说, 我们只需要在pom.xml文件中添加我们想要的依赖, 那么与之相关的所有依赖就会全部自动导入.
比如, 如上图, 我们在项目A中 通过Maven导入 jarA 时, 会自动导入 jarB 和 jarC.
[依赖排除]:
当前阶段我们添加的依赖并不多, 但是随着项目
越来越复杂, 依赖关系也会变得越来越复杂. 就会产生项目不需要某个已导入依赖的情况, 此时我们可以排除依赖: 即 主动断开依赖的资源.
如上图, 如果项目A不需要 jarB, 就可以通过排除依赖的方式来实现. 排除依赖使用exclusions和exclusion标签, 格式如下:
XML
<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>
3. Maven Helper 插件
(1) 概述
插件是什么 : 插件(Plugins) 就是对程序的一些特定场景, 做一些特定的扩展.
Maven Helper 插件的主要功能就是**"依赖管理"**. 包括 依赖分析, 冲突检测, 依赖排除 等功能.
(2)安装
我们可以通过: File --> Settings --> Plugins --> 搜索Maven Helper 来安装Maven Helper 插件.
安装好之后, 我们打开pom.xml文件, 会发现下面多出来一栏(Dependency Analyzer).
在这里我们就可以查看包和包之间的依赖关系, 冲突关系, 以及排除一些依赖.
4. Maven 仓库
(1) 仓库
Maven通过简单的几行代码就能一个jar包导入进项目中. 那么Maven是如何做到的呢?
XML
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
如上述代码, 这快代码我们称之为 mysql-connector-java 包的"坐标". 我们知道, 在数学的坐标系中, 某点的坐标是唯一的. 同样地, 在Maven中, 每个jar包的坐标也是唯一的.
Maven中, jar包由 groupId, artifactId, version 三者共同决定, 缺一不可. 也就是说: 这三者共同构成了某jar包的坐标.
当我们在pom.xml文件中配置好依赖之后, 点击刷新, Maven 就会根据我们写的坐标到仓库中去寻找相应的jar包 并下载下来, 导入到项目中.
jar包下载的地方就叫做**"仓库"**仓库本质上就是一个目录(文件夹), 这个文件夹中存放着我们开发所需要的所有依赖.
(2) 本地仓库和远程仓库
Maven 仓库可以分为两大类 : 本地仓库和远程仓库. 远程仓库又可以分为: 中央仓库, 私服, 其他公共库 等.
[本地仓库]:
本地仓库就是我们自己的计算机上用来存储jar包的一个目录. 当我们在项目中导入一个jar包时, 会先查找本地仓库是否有这个jar包 : 如果有, 直接导入; 如果没有, 再去远程仓库中下载相应的jar包.
我们可以通过File --> Setting --> Maven --> Local respository 来查看本地仓库的地址.
打开该目录, 我们可以看到哟很多的文件. (这个目录一开始是空的, 随着Maven的使用, 文件会越来越多)
[中央仓库]:
中央仓库是Maven中内置的一个远程仓库地址. 中央仓库服务于整个互联网, 全球唯一, 由Maven团队维护.
Maven中央仓库地址: https://repo1.maven.org/maven2/
我们也可以通过Maven官网来访问中央仓库 : https://mvnrepository.com/ 我们查找jar包坐标就是通过这个地址来查找.
查找jar包坐标:
点击版本号, 进去就能查看到jar包的坐标了.
[私服]:
私服 即私有服务器, 一般是由某公司或某团队搭建的仓库.
在有了私服之后, Maven下载依赖的顺序又发生了变化:
- 导入某资源:
(1) 先从本地仓库获取. 如果本地仓库存在该资源, 直接导入.
(2) 如果本地仓库不存在, 再从私服获取. 如果私服存在该资源, 直接导入.
(3) 如果私服中也不存在, 再从中央仓库下载. 如果中央仓库存在该资源, 直接导入.
(4) 如果中央仓库也不存在该资源, 就会报错.
5. 配置Maven国内源
因为中央仓库在国外, 所以下载起来会比较慢, 所以我们选择借助国内一些公开的远程仓库来下载资源. 国内常见的公开远程仓库有: 阿里云, 华为云, 腾讯云 等. 参考: Maven 镜像地址大全 - 知乎.
我们以阿里云仓库为例. 打开settings.xml, 在mirrors节点中, 添加如下代码:
XML
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
这样就给当前项目的配置好国内源了.
但是别忘了也要给新项目配置哈.
好了, 完成以上操作, 我们就能流畅地使用Maven管理项目了~