

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog
💗《博客内容》:大数据、AI开发、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

目录
-
- [一、为什么需要 Maven](#一、为什么需要 Maven)
- [二、Maven 概述](#二、Maven 概述)
-
- [2.1 什么是 Maven](#2.1 什么是 Maven)
- [2.2 构建环节(生命周期阶段)](#2.2 构建环节(生命周期阶段))
- [2.3 工作原理](#2.3 工作原理)
- [2.4 坐标(GAV)](#2.4 坐标(GAV))
- [三、Maven 环境配置](#三、Maven 环境配置)
-
- [3.1 前提](#3.1 前提)
- [3.2 安装 Maven](#3.2 安装 Maven)
- [3.3 配置本地仓库和镜像](#3.3 配置本地仓库和镜像)
- [3.4 配置 JDK 编译版本](#3.4 配置 JDK 编译版本)
- [四、IDEA 集成 Maven](#四、IDEA 集成 Maven)
-
- [4.1 IDEA 中配置 Maven](#4.1 IDEA 中配置 Maven)
- [4.2 创建 Maven Java 项目](#4.2 创建 Maven Java 项目)
- [4.3 创建 Maven Web 项目](#4.3 创建 Maven Web 项目)
- [五、Maven 核心概念](#五、Maven 核心概念)
-
- [5.1 POM(Project Object Model)](#5.1 POM(Project Object Model))
- [5.2 仓库](#5.2 仓库)
- [5.3 依赖管理](#5.3 依赖管理)
- [5.4 依赖传递性](#5.4 依赖传递性)
- [5.5 属性(Properties)](#5.5 属性(Properties))
- [5.6 继承(Parent)](#5.6 继承(Parent))
- [5.7 聚合(Modules)](#5.7 聚合(Modules))
- 六、多模块项目示例(CRM)
- [七、常用 Maven 命令](#七、常用 Maven 命令)
- 八、常见问题
- 九、结尾
Maven 是 Java 项目的构建和依赖管理工具。本文从实际开发痛点出发,讲解 Maven 的核心概念、环境搭建、IDEA 集成、依赖管理、生命周期以及多模块项目拆分等内容,适合入门和日常参考。
一、为什么需要 Maven
在 Maven 出现之前,Java 项目开发中存在以下问题:
-
一个项目就是一个工程
项目庞大时不适合用 package 划分模块,每个模块最好独立为一个项目,方便分工和部署。
-
jar 包需要手动复制
每个项目都要把 jar 拷贝到
WEB-INF/lib目录,多个项目重复存放同一 jar,浪费空间且工程臃肿。Maven 将 jar 统一存放在本地仓库,项目只需引用,无需复制。
-
jar 包下载不规范
不同技术网站的 jar 下载方式各异,Maven 通过中央仓库提供统一规范下载。
-
jar 包的依赖关系需要手动维护
一个 jar 可能依赖其他 jar,手动添加容易遗漏或冲突,Maven 能自动解析和传递依赖。

二、Maven 概述
2.1 什么是 Maven
Maven 是 Apache 的开源项目,基于 项目对象模型(POM) ,通过一小段描述信息管理项目的构建、报告和文档。它是一套自动构建工具 ,也是依赖管理工具。
2.2 构建环节(生命周期阶段)
| 阶段 | 命令 | 说明 |
|---|---|---|
| 清理 | mvn clean |
删除以前编译的 class 文件 |
| 编译 | mvn compile |
将 Java 源程序编译成 class 字节码 |
| 测试 | mvn test |
自动运行 JUnit 测试 |
| 报告 | - | 测试结果报告(自动生成) |
| 打包 | mvn package |
将编译后的代码打包成 jar 或 war |
| 安装 | mvn install |
将打包文件复制到本地仓库 |
| 部署 | mvn deploy |
将 war 包复制到服务器并运行 |
2.3 工作原理
Maven 采用**本地仓库 + 远程仓库(中央仓库/私服)**的结构:
- 本地仓库:默认在
~/.m2/repository,存放已下载的 jar。 - 中央仓库:由 Maven 官方维护,包含大部分开源组件。
- 私服:公司内部搭建的私有仓库,用于共享内部组件或缓存中央仓库。
当项目需要某个 jar 时,Maven 先从本地仓库查找,若没有则从中央仓库(或镜像/私服)下载到本地。
镜像(mirror)相当于拦截器,可将对中央仓库的请求重定向到国内镜像(如阿里云),提高下载速度。
2.4 坐标(GAV)
Maven 使用坐标唯一定位一个构件(jar 包):
| 元素 | 说明 | 示例 |
|---|---|---|
groupId |
组织/公司标识 | com.alibaba |
artifactId |
项目/模块名 | fastjson |
version |
版本号 | 1.2.83 |
packaging |
打包类型(jar/war/pom) | jar |
classifier |
分类(如源码、文档) | sources |
本地仓库的目录结构即按 groupId/artifactId/version 组织。
三、Maven 环境配置
3.1 前提
- 已安装 JDK,并配置
JAVA_HOME环境变量。
3.2 安装 Maven
- 下载 Maven(如
apache-maven-3.8.x-bin.zip),解压到无中文无空格的路径,例如D:\DevTools\apache-maven-3.8.1。 - 配置环境变量:
- 新建
MAVEN_HOME=D:\DevTools\apache-maven-3.8.1 - 在
Path中添加%MAVEN_HOME%\bin
- 新建
- 验证:命令行执行
mvn -v,显示版本信息即成功。
3.3 配置本地仓库和镜像
修改 Maven 安装目录下的 conf/settings.xml:
xml
<!-- 配置本地仓库路径(默认在用户目录/.m2/repository) -->
<localRepository>D:/DevTools/server/repository</localRepository>
<!-- 配置阿里云镜像,加速下载 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
3.4 配置 JDK 编译版本
默认 Maven 使用 JDK 1.5,需在 settings.xml 的 <profiles> 中添加:
xml
<profile>
<id>jdk1.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>
四、IDEA 集成 Maven
4.1 IDEA 中配置 Maven
- 打开
File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven - 设置:
- Maven home directory:Maven 安装目录
- User settings file :指定
settings.xml文件(可勾选 Override) - Local repository:自动读取 settings 中的配置,也可手动指定
4.2 创建 Maven Java 项目
- 新建 Module → Maven → 勾选
Create from archetype→ 选择maven-archetype-quickstart - 输入 GAV 信息,完成创建。
默认目录结构:
项目名/
├── src/
│ ├── main/
│ │ └── java/ # 主程序源码
│ └── test/
│ └── java/ # 测试源码
├── target/ # 编译输出目录
└── pom.xml # 项目核心配置文件
4.3 创建 Maven Web 项目
- 新建 Module → Maven → 勾选
Create from archetype→ 选择maven-archetype-webapp - 输入 GAV 信息,完成创建。
- Web 项目需要配置 Tomcat 运行,或使用 Maven 插件(不推荐)。
五、Maven 核心概念
5.1 POM(Project Object Model)
pom.xml 是 Maven 项目的核心配置文件,包含:
- 项目基本信息(GAV、name、url)
- 依赖列表(
<dependencies>) - 构建插件配置
- 父项目信息(
<parent>) - 属性定义(
<properties>)
5.2 仓库
| 仓库类型 | 说明 |
|---|---|
| 本地仓库 | 本机目录,存放下载的 jar |
| 中央仓库 | Maven 官方仓库,位于 https://repo.maven.apache.org/maven2 |
| 镜像 | 对中央仓库的加速镜像,如阿里云、华为云 |
| 私服 | 公司内部仓库(如 Nexus),用于共享内部组件或缓存 |
5.3 依赖管理
在 pom.xml 中通过 <dependency> 引入 jar:
xml
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.3</version>
<scope>compile</scope> <!-- 默认 compile -->
</dependency>
</dependencies>
依赖作用域(scope)
| scope | 主程序 | 测试程序 | 参与打包 | 典型场景 |
|---|---|---|---|---|
compile(默认) |
生效 | 生效 | 是 | 常规 jar |
test |
不生效 | 生效 | 否 | JUnit |
provided |
生效 | 生效 | 否 | servlet-api(Tomcat 已提供) |
system |
生效 | 生效 | 是 | 本地 jar(需指定 systemPath) |
5.4 依赖传递性
如果 A 依赖 B,B 依赖 C,则 A 会自动依赖 C(除非 C 的 scope 是 test 或 provided)。
Maven 通过最短路径原则 和最先声明原则处理版本冲突。
排除依赖
当传递的依赖不是所需版本时,可排除:
xml
<dependency>
<groupId>org.example</groupId>
<artifactId>ref-v1</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>com.example</groupId>
<artifactId>unwanted</artifactId>
</exclusion>
</exclusions>
</dependency>
5.5 属性(Properties)
定义变量统一管理版本号:
xml
<properties>
<hutool.version>5.7.3</hutool.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
5.6 继承(Parent)
父项目(packaging 为 pom)在 <dependencyManagement> 中声明依赖的版本,子项目只需引入 groupId 和 artifactId,无需指定 version(也可不写 scope,继承自父)。
父项目 pom:
xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.3</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目 pom:
xml
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0</version>
</parent>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies>
若父子项目在同一目录层级,父项目需使用相对路径
<relativePath>。
5.7 聚合(Modules)
将多个子模块组织在一个父项目中,实现统一构建。父项目 pom.xml 中声明:
xml
<modules>
<module>maven_crm_domain</module>
<module>maven_crm_dao</module>
<module>maven_crm_service</module>
<module>maven_crm_web</module>
</modules>
执行 mvn install 父项目时,所有子模块会按顺序被构建。
六、多模块项目示例(CRM)
按照分层或模块拆分,典型结构:
maven_crm (父项目,pom)
├── maven_crm_domain (jar)
├── maven_crm_dao (jar) → 依赖 domain
├── maven_crm_service (jar) → 依赖 dao
└── maven_crm_web (war) → 依赖 service
每个子模块的 pom.xml 继承父项目,并声明所需依赖(不写版本号时从父项目继承)。
这样做的好处:
- 统一管理依赖版本
- 统一构建整个项目
- 模块间边界清晰,便于维护
七、常用 Maven 命令
| 命令 | 说明 |
|---|---|
mvn clean |
删除 target 目录 |
mvn compile |
编译主程序 |
mvn test-compile |
编译测试程序 |
mvn test |
执行测试 |
mvn package |
打包(jar/war) |
mvn install |
安装到本地仓库 |
mvn deploy |
部署到远程仓库(私服) |
mvn dependency:tree |
查看依赖树 |
八、常见问题
- 下载慢:配置阿里云镜像。
- 编译版本过低 :在
pom.xml或settings.xml中指定 JDK 版本。 - IDEA 中 Maven 不生效:检查 IDEA 的 Maven 设置,是否覆盖了本地 settings。
- jar 包冲突 :使用
mvn dependency:tree查看依赖树,利用<exclusions>排除。 - web 项目无法运行 :配置 Tomcat 运行,或使用
mvn tomcat7:run插件(注意版本兼容)。
九、结尾
Maven 主要解决了 Java 项目的两个核心问题:
- 构建自动化:规范了项目结构,提供了生命周期命令。
- 依赖管理:通过坐标和仓库统一管理 jar,自动传递依赖。
掌握 Maven 是学习 Spring Boot 等框架的基础。建议多动手创建 Maven 项目,理解 pom.xml 中各个标签的作用,熟练使用常用命令。
csharp
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文
