目录
一、Maven简介
Maven本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。提供标准的、跨平台的自动化项目构建方式;方便快捷的管理项目依赖的资源(jar包),不用自己一个一个导入jar包(直接配置坐标),避免资源间的版本冲突问题;提供标准的、统一的项目结构,使得在各个编程软件上正常运行。
- Maven本身构造:

- Maven工程目录结构:

src文件里面有main和test两个文件,其中main是用来写程序的,test是用来写测试程序的。在main和test文件中各有java和resources两个文件,其中java是写Java源程序的,resources是用于写配置文件的 。
pom.xml是Maven的基础配置文件,也是Maven项目核心配置文件,用于配置项项目的基本信息,项目的继承关系,项目类型,依赖管理,依赖注入,插件管理,插件注入等等
二、Maven安装与配置详细教程
2.1 Maven下载
下载地址:http://maven.apache.org/download.cgi
这里要注意Maven版本与IDEA版本的兼容性问题(例如IDEA 2021 兼容Mave 3.8.1及之前的所有版本),版本不兼容就可能导致无法导入Maven项目。

下载完成后,解压到某一路径下。 例如我之前解压到 D:\Study\apache-maven-3.3.9,大家记住自己解压到的路径,方便下面配置环境变量。
2.2 配置环境变量
为什么要配置环境变量? 如果不配置环境变量,每次使用maven都需要手动切换目录,当配置环境变量后,就能实现全局访问,简便操作。
(1) 右键 “此电脑” →属性→高级系统设置→环境变量

(2) 在系统变量板块点击新建→输入变量名和变量值(以自己的安装路径为准)→确定

(3) 编辑变量Path(双击Path),添加变量值 %MAVEN_HOME%\bin

(4) 测试是否配置成功,运行cmd,输入mvn -version,出现图二所示则配置成功


2.3 配置本地仓库
为什么要配置本地仓库? 在后面idea中配置Maven时,会有一个Local repository(本地仓库)
它的作用是存储Maven项目从远程仓库下载的依赖库(包括jar、pom文件等),当Maven构建项目时,它会先查找本地仓库中是否有所需的依赖,如果本地已有则直接使用,否则Maven会自动从配置的远程仓库下载这些依赖,并将它们缓存到本地仓库中。所以配置本地仓库提高了构建速率,而且在没有网络连接的情况下,只要之前已成功下载过相关依赖,就可以基于本地仓库进行构建和开发工作
配置流程:
(1)自定义本地仓库文件夹路径,我就在安装路径下新建的文件夹mvn_rsep(建议跟maven安装路径同一级新建,不要像我这样),记住新建文件夹路径

(2)在maven安装文件夹下 → 点击conf → 点击settings.xml文件 → 在55行添加 D:\Study\maven-3.3.9\mvn_rsep (里面的路径填写自己定义的仓库路径)


这样,当我idea中配置好Mave的settings路径后,它会自定识别读取settings文件中的仓库路径,在Local repository显示。
(3)添加完后记得保存退出
2.4 配置阿里云镜像
为什么要配置阿里云镜像?我们使用的资源如果本地仓库没有,那么就需要去中央仓库下载,但是中央仓库在国外,会受到网络延迟和带宽限制的影响。阿里云镜像是对Maven中央仓库的同步镜像,部署在国内服务器上,因此国内用户访问阿里云镜像可以显著提高下载速度,降低等待时间。
阿里云镜像代码:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置流程:
(1)在maven安装文件夹下 → 点击conf → 点击settings.xml文件 → 找到 < mirrors > 149行 → 添加阿里云镜像代码

(2)添加完后记得保存退出
三、IDEA集成Maven
3.1 IDEA局部配置Maven环境
(1)打开设置

(2)找到maven进行配置(让idea读取settings.xml文件内容)→设置完成点击Apply

局部配置会导致每次新建一个项目都需要重复进行这样的操作,有没有一劳永逸的方法?有!那就是全局配置,全局配置后,就不用每次新建一个项目都去重复一遍操作。
3.1 IDEA全局配置Maven环境
(1)关闭项目进入IDEA首页

(2)点击Custonmize

(3)点击All settings…

(4)搜索maven,重复之前的配置操作(勾选Override后才能进行文件路径的选择)

四、IDEA使用Maven创建spring boot项目
(1)新建项目

(2)选择Spring Initializr → 填写完点击next

这里如果选择的Java 21,后期报错兼容问题需要Java 8 的话,就在pom文件中修改

(3)选择需要用的技术集

(4)补全mvan项目目录结构(在maven简介提过)


(5)启动测试SpringBoot项目

(1)创建一个controller包→自定义一个类→编写代码

@Controller
public class SpringBootTest {
@RequestMapping("/test")
@ResponseBody
public String test(){
return "Hello SpringBoot!";
}
}
(2)启动springboot→浏览器输入(http://localhost:8080/test)

至此,简单的maven使用已经差不多了,再往下深化学习就是Maven进阶(分模块设计与开发)聚合与继承
五、进阶知识:Maven分模块设计
什么是分模块设计? 分模块设计就是将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。分模块开发需要先针对模块功能进行设计,再进行编码,不能将工程开发完毕后再进行拆分。
比如当我想用一个项目模块中的一个pojo实体类时,我不能将整个项目都引入到我创建的项目里面(这样对另一个项目模块中的数据不安全),这个时候就可以采用分模块设计,单独创建一个模块项目将pojo放在里面,然后其他两个项目模块需要用到pojo实体类时就引入pojo模块对应的依赖,具体步骤操作如下:
- 创建maven模块,存放实体类
- 将pojo模块的依赖写入需要的模块pom中去
但是这样操作的话可能会重复配置多个依赖(多个模块配置同样的依赖),导致繁琐的操作,因此我们又引入继承与聚合的操作。
1)继承
分开多个工程使用相同的依赖,都要重复的在每个工程的pom文件中写入依赖坐标,这样做就显得非常繁杂,所以引入继承。我单独创建一个工程为父工程,在里面写入子工程重复配置的依赖,这样子工程就可以继承父工程,就不用自己去写依赖,减少了依赖重写度。
-
创建父工程的时候打包方式要设置为pom


-
用< parent>…< /parent>来声明子工程继承的哪个父工程

-
综上,继承的大致流程为创建一个父工程,并设置打包方式为pom;再创建一个子工程然后让子工程继承这个父工程


2)聚合
在继承当中,模块想要打包还需要去将父工程和其依赖的其他对应工程先打包下载到本地仓库后才能打包成功,在后面依赖关系多的情况下反而增加了工作量,因此采用了聚合操作。聚合就是将多个模块组织成一个整体,同时进行项目的构建。
- 在父工程(聚合工程)中通过< modules>…< /modules>进行编写


这样操作后,当在父工程(聚合工程)中执行打包等操作的时候,聚合的模块都会同时执行相同的操作,就不用一个一个模块去执行操作。
3)总结(分模块设计为什么要使用maven继承与聚合?)
- 继承 (Inheritance):
减少重复配置:父POM可以定义全局的依赖管理、插件配置、构建配置等,子模块只需要专注于自身的特定配置,从而简化项目管理和维护。
版本一致性:通过在父POM中统一管理依赖版本,确保整个项目中的所有模块使用一致且最新的库版本,避免因不同模块使用不同版本导致的问题。
可扩展性:开发团队可以创建一个公司或组织级别的基础POM,用于标准化项目的构建流程和依赖管理。 - 聚合 (Aggregation):
多模块构建:聚合项目(也称为主项目或父项目)可以将多个子模块作为一个整体进行构建,只需执行一次命令即可编译、测试和打包所有相关模块。
统一部署:如果项目包含多个子模块,聚合项目可以生成一个综合的工件,例如包含所有模块的EAR文件,方便一次性部署到服务器环境。
构建顺序控制:聚合项目可以根据需要定义子模块之间的构建顺序,保证先构建的模块能够被后续模块所依赖。
简化命令行操作:在一个大型多模块项目中,开发者无需分别进入每个子模块目录去执行构建命令,直接在聚合项目下运行Maven命令即可处理所有模块。
本文详细介绍了Maven的项目管理原理、安装与配置步骤,包括下载、环境变量配置、本地仓库和阿里云镜像设置。此外,还讲述了如何在IDEA中集成Maven以及使用Maven创建SpringBoot项目,最后涉及Maven的分模块设计、继承和聚合概念,帮助读者全面掌握Maven的高级应用。


3528

被折叠的 条评论
为什么被折叠?



