前言
Maven 是一款用于管理和构建Java项目的工具。
一、Maven的概念
Maven 是一款用于管理和构建Java项目的工具。
二、Maven的作用

(一) 依赖管理
方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题。
1. 只需要在maven项目的pom.xml文件中,添加一段如下图所示的配置即可实现!!

2. 在maven项目的配置文件中,加入上面这么一段配置信息之后,maven会自动的根据配置信息的描述,去下载对应的依赖。 然后在项目中,就可以直接使用了。
(二) 项目构建
Maven提供了标准化的跨平台的自动化构建方式。
1. 通过Maven中的命令,可以很方便的完成项目的跨平台-编译(compile)、测试(test)、打包(package)、发布(deploy) 等操作

(三) 统一的项目结构
Maven 提供了标准、统一的项目结构。
1. 使用Maven这款项目构建工具,它给我们提供了一套标准的java项目目录。意味着,无论我们使用的是什么开发工具,只要是基于maven构建的java项目,最终的目录结构都是相同的。
2. 统一的maven项目结构

4. 那这样呢,我们使用Eclipse、MyEclipse、IDEA创建的maven项目,就可以在各个开发工具之间直接导入使用了,更加方便、快捷。
三、Maven的核心内容
(一) Maven下载与安装
一、下载
下载网址:https://maven.apache.org/download.cgi
(建议:jdk版本、Maven版本:直接找公司组长或组员要,避免版本不兼容问题)
二、安装
1、解压安装(建议解压到没有中文、特殊字符的路径下)
2、配置本地仓库
● 在该安装目录下新建一个文件夹mvn-repo(本地maven仓库),用来存储jar包
● 进入到conf目录下修改settings.xml配置文件
● 新建标签体,将新建的用来存储jar包的文件路径放在标签体内
3、配置阿里云私服
● 进入到conf目录下修改settings.xml配置文件:
- 在标签下为其添加子标签,内容如下:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4、配置Maven环境变量(Maven环境变量的配置类似于JDK环境变量配置一样)
在系统变量处新建一个变量MAVEN_HOME。 MAVEN_HOME环境变量的值,设置为maven的解压安装目录

在Path中进行配置。 PATH环境变量的值,设置为:%MAVEN_HOME%\bin

打开DOS命令提示符进行验证,命令为:mvn -v,若如下图所示,则表示安装成功。

(二)Maven模型
● 项目对象模型 (POM,Project Object Model):用来描述当前的maven项目
● 依赖管理模型(Dependency)
○ Maven坐标
■ 概念:资源的唯一标识 , 通过该坐标可以唯一定位资源位置
■ 作用:使用坐标来定义项目或引入项目中需要的依赖
■ 主要组成:
● 构建生命周期/阶段(Build lifecycle & phases)
(三)创建Maven项目

一、配置Maven环境(在IDEA中配置Maven环境,默认全局设置)
- 进入IDEA的欢迎页面
● 选择 IDEA中 File
● => close project => Customize=> All settings - 打开 All settings , 选择 Build,Execution,Deployment
● => Build Tools => Maven - 配置工程的编译版本为17
二、创建Maven项目
- 创建一个空项目,命名为 web-project01
- 创建好项目之后,进入项目中,要设置JDK的版本号。选择小齿轮,选择 Project Structure
- 创建模块,选择Java语言,选择Maven。 填写模块的基本信息

- 在maven项目中,创建HelloWorld类,并运行
(四)导入Maven项目
建议:将要导入的maven项目复制到自己的项目目录下
● 方式一:File->Project Structure->Modules->Import Module->选择maven项目的pom.xml。
● 方式二:Maven面板->+(Add Maven Projects)->选择maven项目的pom.xml。
(五)依赖引入
- 依赖的概念:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖。
- 例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引入logback的依赖。具体步骤如下:
a. 在pom.xml中编写标签
b. 在标签中使用引入坐标
c. 定义坐标的 groupId、artifactId、version
<dependencies>
<!-- 依赖 : spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.4</version>
</dependency>
</dependencies>
- 点击刷新按钮,引入最新加入的坐标
- 刷新依赖:保证每一次引入新的依赖,或者修改现有的依赖配置,都可以加入最新的坐标

a. 如果引入的依赖,在本地仓库中不存在,将会连接远程仓库 / 中央仓库,然后下载依赖(这个过程会比较耗时,耐心等待)
b. 如果不知道依赖的坐标信息,可以到mvn的中央仓库(https://mvnrepository.com/)中搜索
(六)依赖传递
- 概念:如果在maven项目中,A 依赖了B,B依赖了C,C依赖了D,那么在A项目中,也会有C、D依赖,因为依赖会传递。
(七)排除依赖(依赖排除)
- 概念:排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。(如果传递下来的依赖,在项目开发中确实不需要,此时可以通过Maven中的排除依赖功能,来将这个依赖排除掉。)
- 配置形式如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.4</version>
<!--排除依赖, 主动断开依赖的资源-->
<exclusions>
<exclusion>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-observation</artifactId>
</exclusion>
</exclusions>
</dependency>
(八)Maven的生命周期
- 概念:描述了一次项目构建,经历哪些阶段。
● 生命周期的顺序是:clean --> validate --> compile --> test --> package --> verify --> install --> site --> deploy
● 着重关注:clean --> compile --> test --> package --> install - 生命周期本身不做任何实际工作。在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。
- 在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。
- Maven对项目构建的生命周期划分为3套(相互独立):
● clean:清理工作。
● default:核心工作。如:编译、测试、打包、安装、部署等。
● site:生成报告、发布站点等。
思考:当运行package生命周期时,clean、compile生命周期会不会运行?
clean不会运行,compile会运行。 因为compile与package属于同一套生命周期,而clean与package不属于同一套生命周期。
● clean:移除上一次构建生成的文件
● compile:编译项目源代码
● test:使用合适的单元测试框架运行测试(junit)
● package:将编译后的文件打包,如:jar、war等
● install:安装项目到本地仓库
- 执行指定的生命周期,有两种执行方式:
a. 在idea工具右侧的maven工具栏中,选择对应的生命周期,双击执行
b. 在DOS命令行cmd中,通过maven命令执行,比如命令:
○ mvn compile
○ mvn test
○ mvn package
○ mvn install四、Maven常见问题

● 问题现象:Maven项目中添加的依赖,未正确下载,造成右侧Maven面板中的依赖报红,再次reload重新加载也不会再下载。
● 产生原因:由于网络原因,依赖没有下载完整导致的,在maven仓库中生成了xxx.lastUpdated文件,该文件不删除,不会再重新下载。
解决方案:
- 根据maven依赖的坐标,找到仓库中对应的 xxx.lastUpdated 文件,删除,删除之后重新加载项目即可。
- 通过命令 (del /s *.lastUpdated) 批量递归删除指定目录下的 xxx.lastUpdated 文件,删除之后重新加载项目即可。
- 重新加载依赖,依赖下载了之后,maven面板可能还会报红,此时可以关闭IDEA,重新打开IDEA加载此项目即可。
为了使大家能够方便的解决这个问题,大家可以将资料中提供的 del.bat 批处理脚本,拷贝到maven的安装目录下。 双击这个文件,就可以递归删除该目录下所有的 xxx.lastUpdated 文件。 放置目录如下所示:
● 附件(上述提到的del.bat批处理文件, 也可以直接点此下载):
del.bat