JavaEE 进阶第五期:Maven 之道,项目的依赖艺术与构建哲学



专栏:JavaEE 进阶跃迁营
个人主页:手握风云
目录
一、Maven 的介绍
1.1. 什么是 Maven
1.2. 为什么需要学习 Maven
1.3. 创建一个 Maven 项目
二、Maven 的核心功能
2.1. 项目构建
2.2. 依赖管理
2.3. Maven Help 插件
三、Maven 仓库
3.1. 本地仓库
3.2. 中央仓库
3.3. 私服
一、Maven 的介绍
1.1. 什么是 Maven
官方对于 Maven 的描述
Apache Maven is a build tool for Java projects. Using a project object model (POM), Maven manages a project's compilation, testing, and documentation.
翻译成中文:Apache Maven 是一款用于 Java 项目的构建工具。借助项目对象模型(POM),Maven 可管理项目的编译、测试和文档制作。
1.2. 为什么需要学习 Maven
学习 Maven 不是 “额外负担”,而是掌握 Java 开发(尤其是 Spring、Spring Boot 等主流框架)的必备前提—— 文档后续创建 Spring Boot 项目时,正是基于 Maven 实现依赖引入(如 spring-boot-starter-web)和项目构建,若不理解 Maven,将无法排查 “依赖下载失败”“Jar 包冲突” 等常见问题。
1.3. 创建一个 Maven 项目
这里以 IntelliJ IDEA 2022.1.4 为例,IDEA 本身已经集成了 Maven,直接使用,无需安装。

创建好之后,里面会有一个 pom.xml 文件,这是 maven 的配置文件,用于描述项目的各种信息。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>Test11.4.1</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties></project>
二、Maven 的核心功能
Maven 在项目开发中的作用主要体现在两个方面:项目构建和管理依赖。
2.1. 项目构建
在 Maven 的核心能力中,项目构建是其最基础且关键的功能之一。它通过提供标准、跨平台(Linux/Windows/MacOS 等)的自动化构建流程,解决了传统手动构建项目(如编译、测试、打包、发布)中重复繁琐、易出错的问题,大幅提升开发效率。
传统开发中,代码修改后需反复执行 “编译→测试→打包→部署” 等步骤,且不同环境(如开发者本地、测试服务器)的操作可能存在差异。Maven 项目构建的核心目标是:将项目构建流程标准化、自动化,无论在何种环境,只需简单命令即可完成一致的构建操作。
Maven 定义了一套统一的项目构建生命周期(Lifecycle),每个生命周期包含一系列有序的 “阶段(Phase)”,执行后续阶段时会自动触发前置阶段。我们在 IntelliJ IDEA 的右侧,点击 Maven,再点击 LifeStyle,就可以找到这些命令。

-
clean 可以理解为 “大扫除”,会把 Maven 之前构建项目时生成的各种临时文件、编译文件、打包文件等都清理掉,让项目回到 “干干净净” 的初始状态。
-
validate 相当于 “初步检查”,Maven 会帮你检查项目的配置、依赖是否有问题,确保项目具备正常构建的基本条件。
-
compile 就是 “翻译代码”,把你写的 Java 源代码(.java 文件)转换成计算机能识别的字节码文件(.class 文件)。
-
test 类似于 “做试卷检查”,会运行你写的测试代码(比如用 JUnit 写的测试),验证你的业务代码功能是否符合预期。
-
package 好比 “打包快递”,把编译好的代码、配置文件等资源打包成一个可分发的格式,比如常见的 jar 包(Java 项目)、war 包(Web 项目)。
-
verify 是 “深度质检”,在 package 之后再做一次全面检查,确保打包好的内容没有问题(比如测试是否全通过、配置是否合规等)。
-
install 就像 “把特产放进自家储藏室”,把打包好的包安装到你本地的 Maven 仓库里,方便你本地其他项目依赖它。
-
site 可以理解为 “生成项目说明书网页”,会创建一个包含项目信息、测试报告、依赖信息等内容的网站文档,方便别人了解你的项目。
-
deploy 类似于 “把特产放到超市货架”,把打包好的包发布到远程 Maven 仓库(比如公司私服、公共仓库),让其他人能从远程仓库获取并使用这个包。
2.2. 依赖管理
依赖(Dependency)指当前项目运行或编译所必需的外部资源,最常见的就是 Jar 包(如 MySQL 驱动、Spring 框架 Jar 包等)。
Maven 依赖管理的核心逻辑是:通过项目的配置文件 pom.xml 定义依赖的 “唯一坐标”,Maven 会自动根据坐标从仓库中下载 Jar 包,并管理其依赖关系(如 A 依赖 B、B 依赖 C 的链式关系),无需手动复制 Jar 包到项目中。比如若项目需要 MySQL 驱动,需手动到官网下载 mysql-connector-java.jar,再复制到项目的 lib 文件夹;而用 Maven 只需在 pom.xml 中写几行配置,点击 “Load” 即可自动完成 Jar 包的下载与引入。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>Test11.4.1</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies></project>

- 配置依赖坐标
Maven 通过 “坐标(GAV)” 唯一标识一个 Jar 包。坐标由 groupID、artifactId、version 组成,其作用类似 “快递地址”,Maven 通过这三个信息精准定位仓库中的 Jar 包。
- 依赖传递
传统开发中,若项目 A 依赖 Jar 包 B,而 Jar 包 B 又依赖 Jar 包 C(即 A→B→C),则需手动下载 B 和 C 两个 Jar 包,否则会出现 “类缺失” 错误。Maven 支持 依赖传递:只需在 pom.xml 中配置 “直接依赖”(如 A 依赖 B),Maven 会自动分析 B 的依赖关系,将 “间接依赖”(如 C)一并下载并引入项目。
- 依赖排除
当项目中存在 “无用的间接依赖” 时(如 A 依赖 B,B 依赖 C,但 A 不需要 C),可通过 依赖排除 主动断开 C 的引入,避免 Jar 包冗余或版本冲突。
2.3. Maven Help 插件
当项目依赖关系复杂(如引入多个框架),手动分析冲突难度大,可借助 Maven Help 插件 可视化查看依赖树、定位冲突 Jar 包。
快捷键 ctrl + alt + s 打开设置,点击 plugins,搜索“Maven Helper”,安装好之后,点击右下角的 Dependencies,再打开 pom 文件,就可以查看依赖关系了。


三、Maven 仓库
Maven 仓库是 Maven 管理依赖(jar 包、插件等资源)的核心组件,其本质是存储资源的目录(文件夹),通过统一的规则管理依赖的下载、缓存和复用,避免手动添加 jar 包的繁琐操作。
Maven 仓库分为本地仓库和远程仓库两大类,远程仓库又细分为中央仓库、私服和其他公共库。
3.1. 本地仓库
本地仓库是开发者个人计算机上的目录,用于缓存从远程仓库下载的依赖,供本地所有 Maven 项目复用。在 IDEA 的设置里面,进入 Build, Execution, Deployment → Build Tools → Maven,在 Local repository 处可查看 / 修改本地仓库路径。
当项目引入依赖时,Maven 优先检查本地仓库:若本地仓库已存在该依赖,直接引用,无需下载;若本地仓库不存在该依赖,自动从远程仓库(中央仓库 / 私服)下载,并缓存到本地仓库。
3.2. 中央仓库
Maven 官方内置的远程仓库,由 Maven 团队维护,全球唯一,是所有 Maven 项目默认的依赖来源。
3.3. 私服
由企业 / 团队自行搭建的私有远程仓库,仅对内部成员开放(需权限验证)。

