一、Maven简述
1.1 什么是Maven?

Apache Maven 是一款基于 Java 平台的项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
简单来讲Maven就是一个构建工具,用来管理我们的项目和依赖(jar),这样我们能把更多的精力放在开发上。
当然除了学习Maven外后期还会接触Gradle等构建工具。(之前搞安卓的时候接触过Gradle?)
Apache Maven官网:https://maven.apache.org/

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
提供了一套标准化的项目结构(所有IDE使用Maven构建的项目结构完全一样)
提供了一套标准化的构建流程(如 编译、测试、打包(jar包)、发布等)
提供了一套依赖管理机制(使用Maven坐标配置来管理各种依赖)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJfT2cwv-1667221049217)(Maven笔记.assets/image-20220522073140486.png)]](https://img-blog.csdnimg.cn/1935a27394c54f1d8cb54090009432ec.png)
1.2 Maven模型
- POM(Project Object Model)项目对象模型。
- Dependency 依赖管理模型。
- Plugin 插件。
1.3 Maven仓库
Maven Repository(Maven仓库)
Maven中有如下3种仓库:
本地仓库,自己电脑上的仓库(存jar包的位置)
私服仓库,速度比中央仓库要快,通常都是由一些公司、组织搭建的私有仓库,用于同步中央仓库上的文件。
中央仓库:在互联网中,由Apache团队维护,包含了基本所有的jar包,版权原因不包含Oracle的驱动包
中央仓库地址:https://mvnrepository.com

二、Maven的安装配置
2.1 下载Maven
新版Maven的下载地址:https://maven.apache.org/download.cgi
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7QyUNeZ4-1667221049218)(Maven笔记.assets/image-20220521213120092.png)]](https://img-blog.csdnimg.cn/5475c2b77f474721aa1ee883971b40d9.png)
通常比较新的东西不太稳定,接下来我们下载一个maven3.6.1Windows版。
Maven3.6.1下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries


下载成功后,将Maven文件夹移动到你的工作目录并解压包即可。
Maven目录结构如下:

- bin目录:存放一些可执行命令。(例如 mvn命令)
- boot目录:该目录下只有一个文件
plexus-classworlds-xxx.jar,这个文件它是一个类加载器框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库。 - conf目录:存放maven相关的配置文件。(例如 setting.xml)
- lib目录:存放maven依赖的jar包。(Maven也是使用java开发的,所以它也需要依赖其他的jar包)
2.2 配置环境变量
1、新建系统变量MAVEN_HOME
| 变量名 | 变量值 |
|---|---|
| MAVEN_HOME | D:\Program Files\Environment\apache-maven-3.6.1(Maven的安装目录/位置) |
2、在系统变量path中引用这个变量
| 变量名 | 变量值 |
|---|---|
| Path | %MAVEN_HOME%\bin |
3、在命令提示符窗口中输入mvn -version
mvn -version

出现上述结果,表示Maven已经安装成功啦。
当然Maven的卸载也很简单,将Maven的工作目录删除,然后删除它的环境变量即可。
2.3 配置本地仓库
1、在Maven的工作目录中创建一个maven_repo文件夹,用来存放我们以后从中央仓库下载的jar包。

2、在conf/setting.xml文件中配置一个<localRepository>标签,并指向本地仓库位置。

<localRepository>D:\Program Files\Environment\apache-maven-3.6.1\maven_repo</localRepository>

配置之后,项目需要的依赖jar包如果本地仓库没有的话就需要去中央仓库下载,但是中央仓库在国外,速度会很慢,这时我们可以配置镜像服务器,只需要在conf/setting.xml中添加镜像地址即可。
2.4 配置阿里云镜像加速
在conf/setting.xml文件的<mirrors>标签中添加阿里云私服。
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLNniBJ7-1667221049227)(Maven笔记.assets/image-20220521222023776.png)]](https://img-blog.csdnimg.cn/cd46a5b335f649c7867fc0c847e97503.png)
2.5 配置使用JDK8编译
maven3.6.1版本默认的jdk版本是1.5,就会导致项目的兼容性问题,所以需要配置成1.8。
在 conf/settings.xml 中的 <profiles>标签内配置:

<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
三、Maven的基本使用
3.1 Maven常用命令
Maven常用命令:
编译(compile)
清理(clean)
打包(package)
测试 (test)
安装(install)
命令详解:
mvn compile # 编译项目的源代码(会class字节码文件放在target目标目录中)
mvn clean # 清除项目中target目录
maven package # 将编译后的代码打包,如jar、war或者ear文件
mvn test # 运行应用程序中的单元测试
mvn install # 将项目包安装到本地仓库,这样项目包就可以用作其他本地项目的依赖
注意:执行maven命令需要当前目录有pom文件,然后在cmd窗口执行命令。


3.2 Maven的生命周期
Maven构建项目的生命周期描述的是一次构建过程经历经历了多少个事件。
Maven 对项目构建的生命周期划分为3套:
- clean:清理工作。
- default:核心工作,例如编译,测试,打包,安装等。
- site:产生报告,发布站点等。
注意:同一生命周期内,执行后面的命令,前边的所有命令都会自动执行。

例如 小张对maven项目进行打包操作,执行流程就是编译->测试->打包。
也就是同一生命周期内,执行后面的命令,前边的所有命令都会自动执行。
3.3 在IntelliJ IDEA中配置Maven
参考文章:https://blog.csdn.net/QZP51ZX/article/details/107522316
1、设置IntelliJ IDEA使用本地安装的Maven,并修改配置文件路径:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvp3qkVO-1667221049227)(Maven笔记.assets/image-20220522062936040.png)]](https://img-blog.csdnimg.cn/e76c765f7e4e4eff8720f768229f934b.png)
2、设置maven在不联网的情况下使用本地插件构建项目:
-DarchetypeCatalog=internal
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gFjgdkPa-1667221049228)(Maven笔记.assets/b26495a420c348fb9a7dd6e924cb2a1c.png)]](https://img-blog.csdnimg.cn/7ac7e32cb6f14fde98f09716143abd2c.png)
然后重启IntelliJ IDEA即可!
3.4 Maven坐标详解
1、Maven坐标是用来干什么的?
- Maven坐标指的是资源的唯一标识;
- 使用坐标来构建项目或者引入项目中需要的依赖(dependency)
2、Maven坐标主要组成:
- groupId:定义当前Maven项目隶属组织名称(通常是公司域名反写,例如: com.baidou)
- artifactId:定义当前Maven项目名称(通常是模块名称)
- version:定义当前项目的版本号(SNAPSHOP快照版本,RELEASE稳定版本 )
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiLBL4dO-1667221049229)(Maven笔记.assets/image-20220522074354082.png)]](https://img-blog.csdnimg.cn/6b47373e631d448b87fb1a8e3b023943.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9r6sfpqC-1667221049229)(Maven笔记.assets/image-20220522074459026.png)]](https://img-blog.csdnimg.cn/62ed451ca0b74218b97bc977562bdaab.png)
3.5 使用IDEA创建Maven普通项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-19Q76VPs-1667221049230)(Maven笔记.assets/image-20220522083622729.png)]](https://img-blog.csdnimg.cn/7249ad4e36814ea9b0565e01d2f065c2.png)
maven项目结构详解:![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JZ7yiDug-1667221049230)(Maven笔记.assets/image-20220522090608086.png)]](https://img-blog.csdnimg.cn/db79a71cde494a7090564dce6b53ee84.png)
可以在IDEA安装一个MavenHelper,简化Maven的使用。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNq6zJWA-1667221049231)(Maven笔记.assets/image-20220522093901508.png)]](https://img-blog.csdnimg.cn/0c21b45c963047f6be947fa292d74b70.png)
3.6 使用IDEA导入Maven项目
1、选择右侧Maven面板,点击+号。
2、选中对应项目的pom.xml文件,双击即可。
3、如果没有Maven面板,选择View → Appearance > Tool Window Bars即可。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foCZ4fFe-1667221049232)(Maven笔记.assets/image-20220522085105320.png)]](https://img-blog.csdnimg.cn/713f310c8a384a3498ec664e42e88a7a.png)
3.7 使用IDEA构建Maven Web项目
1、创建一个Maven-Web项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2pCsLtui-1667221049232)(Maven笔记.assets/image-20220522091847929.png)]](https://img-blog.csdnimg.cn/1afb3fbf2e3d4fdd876c44c576a5cce9.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nReBAZTj-1667221049233)(Maven笔记.assets/image-20220522092334423.png)]](https://img-blog.csdnimg.cn/44e554903d6c4c918c3054ea82e310a8.png)
2、向pom.xml中引入Tomcat插件,并刷新依赖
<build>
<plugins>
<!-- Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port> <!-- 访问端口 -->
<path>/</path> <!-- 访问路径 -->
</configuration>
</plugin>
</plugins>
</build>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rzW24nb1-1667221049233)(Maven笔记.assets/image-20220522093115861.png)]](https://img-blog.csdnimg.cn/aafe122cc1104ca3b372d38a01b3fba8.png)
3、启动Tomcat
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-43QckJOv-1667221049234)(Maven笔记.assets/image-20220522094241309.png)]](https://img-blog.csdnimg.cn/7528ba1e456947e6a6c6b642a4fe29ca.png)
控制台出现如下结果表示启动成功。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NF1vG7JR-1667221049235)(Maven笔记.assets/image-20220522094320414.png)]](https://img-blog.csdnimg.cn/54869e167a7e480d8c5867402cf82054.png)
4、测试访问 http://127.0.0.1:8080
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdstCz12-1667221049235)(Maven笔记.assets/image-20220522094416009.png)]](https://img-blog.csdnimg.cn/0fa2cd7b7796491ea54755d884ae814c.png)
3.8 使用Maven构建SpringBoot项目
Maven 的配置:
<!--阿里云镜像源-->
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!--切换jdk编译版本-->
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
1、 创建一个普通Maven项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aM5NFsDw-1667221734518)(Maven笔记.assets/image-20211214202600241.png)]](https://img-blog.csdnimg.cn/836a27c8cb784747bb74ecadfb679703.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvIZ28OZ-1667221049236)(Maven笔记.assets/image-20211214203425845.png)]](https://img-blog.csdnimg.cn/ebaf51bae8594608afcc336f0168ced4.png)
2、向 pom.xml 文件中引入依赖
<!--父级依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IR0rA0lU-1667221049237)(Maven笔记.assets/image-20211214204402298-1639492010634.png)]](https://img-blog.csdnimg.cn/66d4e64f0210485b9dc3e6d46831ae82.png)
ok已经成功将依赖导入到项目中!
3、创建一个入口程序,用于启动SpringBoot应用程序
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot启动类
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lRfv03HO-1667221049238)(Maven笔记.assets/image-20211214214313913.png)]](https://img-blog.csdnimg.cn/b990d0a0a38c4d7a8d3290d6fabec040.png)
4、编写业务
package com.baidou.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "你好 SpringBoot!!!";
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OjDQxi2K-1667221049239)(Maven笔记.assets/image-20211214210536049.png)]](https://img-blog.csdnimg.cn/ab8db98bb52e4c1cb4012ea11c5ac803.png)
5、测试运行
执行启动类中的main方法便可以运行这个springboot应用:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZTYdOk4-1667221049239)(Maven笔记.assets/image-20211214215609802.png)]](https://img-blog.csdnimg.cn/200a8babbcef4a3dac5e97c17705cff8.png)
ok项目已经启动成功啦!
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5KHR0PpM-1667221049240)(Maven笔记.assets/image-20211214214543382.png)]](https://img-blog.csdnimg.cn/6b95c35481324386bf7ae609f102abe2.png)
测试访问:http://localhost:8080/hello
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEwj0nUk-1667221049240)(Maven笔记.assets/image-20211214215400085.png)]](https://img-blog.csdnimg.cn/70186662150d4cdc88c2eb4f0fcb402d.png)
6、简化配置,在resources目录中创建一个application.properties文件
# 修改tomcat服务器的端口号
server.port=8089
重新启动项目,并测试 http://localhost:8089/hello

7、简化部署
向pom.xml引入打包插件,这样就可以将项目打成jar包,然后部署到服务器上啦。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8qc0QV5N-1667221049241)(Maven笔记.assets/image-20211214221006548.png)]](https://img-blog.csdnimg.cn/5990f29acb75423d9d96a2868e6c6080.png)
点击右侧的maven->Lifecycle->package:(maven打包操作)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKvmG7VZ-1667221049241)(Maven笔记.assets/image-20211214221235552.png)]](https://img-blog.csdnimg.cn/debb92cc0037473eacb6ad3bbddf0650.png)
然后target目标目录中便会自动生成该项目的jar包;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkNTB1vZ-1667221049242)(Maven笔记.assets/image-20211214221424702.png)]](https://img-blog.csdnimg.cn/b0e24c1c9c104d559c239d7778346cc2.png)
运行jar文件:java -jar xxx.jar。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WC7E7Shv-1667221049242)(Maven笔记.assets/image-20211214221958991.png)]](https://img-blog.csdnimg.cn/fe34123ca27541b7949f8e5c3c16306c.png)
四、依赖管理
4.1 使用坐标导入jar包
Maven中央仓库:https://mvnrepository.com
1、在pom.xml中编写<dependencies>标签。
2、在<dependencies>标签中使用<dependency>引入坐标。
3、定义坐标的groupld,artifactld,version。
4、点击刷新按钮,使坐标生效。
4.2 依赖范围
依赖范围(scope)指的是该jar包在哪个阶段时才会有效,只要在对应的依赖坐标里配置<scope>标签,便可以控制依赖的作用范围。也就是设置对应jar包的作用范围:编译环境、测试环境、运行环境。(不写的话默认值是compile )
依赖范围指的是坐标的依赖范围,
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope> <!--只在测试环境有效-->
</dependency>
| 依赖范围 | 编译有效 | 测试有效 | 运行时有效 | 打包有效 | 例子 |
|---|---|---|---|---|---|
| compile | √ | √ | √ | √ | spring-core |
| test | x | √ | x | x | junit |
| provided | √ | √ | x | x | servlet-api |
| runtime | x | √ | √ | √ | JDBC驱动 |
| system | √ | √ | x | x | 本地maven仓库 之外的类库 |
4.3 解决依赖冲突问题
参考文章:https://blog.csdn.net/lovequanquqn/article/details/81627807