Maven 从入门到精通(2025-2026 最新实用版)
Maven 是 Java 生态中最主流的项目构建和管理工具,几乎所有现代 Java 项目(Spring Boot、微服务、大型企业级系统)都离不开它。它帮你解决依赖地狱、统一构建流程、标准化项目结构三大痛点。
本文从零基础到生产级实践,一条线带你吃透 Maven。
1. Maven 到底解决了什么问题?(为什么你要学)
没有 Maven 的时代痛点:
- 手动下载 JAR 包 → 版本冲突 → 依赖传递问题
- 每个人构建命令不同(ant、gradle、shell 脚本……)
- 项目结构五花八门,新人接手成本极高
- 测试、打包、部署流程不统一
Maven 带来的改变(核心价值):
- 统一标准:目录结构、构建生命周期、依赖坐标
- 依赖自动管理:中央仓库 + 传递依赖 + 版本统一
- 插件生态:编译、测试、打包、生成文档、docker 构建……
- 跨平台:同一套 pom.xml,Windows / Linux / Mac 都能跑
一句话:Maven 让“构建”这件事从艺术变成了工程。
2. 快速入门(10 分钟上手)
步骤1:安装 Maven(2025-2026 推荐方式)
- 下载:https://maven.apache.org/download.cgi
推荐最新稳定版(目前 3.9.x 系列) - 环境变量(最重要一步!)
M2_HOME = D:\apache-maven-3.9.x
MAVEN_HOME = %M2_HOME%(部分系统也认这个)
Path += %M2_HOME%\bin
- 验证:
mvn -version
看到 Maven 版本 + Java 版本即成功
- 推荐镜像(中国大陆必配)
编辑~/.m2/settings.xml(没有就新建):
<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
步骤2:创建第一个 Maven 项目
命令行方式(最纯正):
mvn archetype:generate -DgroupId=com.example -DartifactId=my-first-maven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
IDEA / VS Code 方式(推荐):
- New Project → Maven → 选择 quickstart 骨架
生成后目录结构(记住这套约定):
my-first-maven
├── pom.xml
└── src
├── main
│ ├── java ← 主代码
│ └── resources ← 配置文件、properties、xml 等
└── test
├── java ← 测试代码
└── resources ← 测试资源
步骤3:核心命令(背下来)
| 命令 | 含义 | 使用频率 |
|---|---|---|
mvn clean | 删除 target 目录 | ★★★★ |
mvn compile | 编译主代码 | ★★ |
mvn test | 编译 + 运行单元测试 | ★★★★ |
mvn package | 打包(jar/war) | ★★★★★ |
mvn install | 打包 + 安装到本地仓库 | ★★★★ |
mvn deploy | 发布到私服 | ★★ |
mvn clean install -U | 强制更新依赖 + 安装 | 常用 |
最常用组合:mvn clean install -U
3. Maven 核心概念(必须吃透)
3.1 POM(Project Object Model) — 项目描述文件
<project>
<modelVersion>4.0.0</modelVersion>
<!-- 坐标(全世界唯一标识) -->
<groupId>com.company</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging> <!-- jar / war / pom / maven-plugin -->
<name>项目名称</name>
<description>一句话描述</description>
<!-- 属性统一管理版本 -->
<properties>
<java.version>17</java.version>
<spring-boot.version>3.2.5</spring-boot.version>
</properties>
<!-- 依赖管理 -->
<dependencyManagement>...</dependencyManagement>
<!-- 实际依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
<build>
<plugins>...</plugins>
</build>
</project>
3.2 坐标(GAV) — 全球唯一定位
- groupId:公司/组织反写域名
- artifactId:项目名/模块名
- version:版本号(推荐语义化:主.次.增量-SNAPSHOT)
3.3 依赖范围(scope) — 超重要!
| scope | 含义 | 编译时 | 测试时 | 运行时 | 打包进最终产物 |
|---|---|---|---|---|---|
| compile | 默认,编译+运行都需要 | √ | √ | √ | √ |
| test | 只用于测试(junit) | √ | |||
| provided | 编译需要,运行时由容器提供(servlet-api) | √ | √ | ||
| runtime | 运行时需要,编译不需要(jdbc 驱动) | √ | √ | ||
| system | 本地 JAR,不推荐 | √ | √ | √ | √ |
3.4 生命周期(Lifecycle) — 构建的标准化流程
Maven 有三套生命周期(最常用的是 default):
default 生命周期核心阶段(从前往后执行):
- validate → compile → test → package → verify → install → deploy
常用命令对应阶段:
- mvn compile → 执行到 compile
- mvn package → 执行到 package
- mvn install → 执行到 install
3.5 插件(Plugin) — Maven 的真正执行者
Maven 本身只是调度器,所有能力来自插件。
常用插件(生产必备):
<build>
<plugins>
<!-- 编译插件(Java 17+) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- Spring Boot 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
4. 多模块项目(企业级必备)
典型结构:
parent-project (pom)
├── pom.xml
├── common-module
├── service-module
├── web-module
└── aggregator (可选)
父 pom 最佳实践:
- 使用
<dependencyManagement>统一版本 - 使用
<pluginManagement>统一插件配置 - 子模块只
<dependency>不写版本
5. 生产级最佳实践(2025-2026)
- 版本管理:统一放在父 pom 的 properties + dependencyManagement
- 不要 SNAPSHOT 进私服(除非开发阶段)
- 依赖尽量显式声明(避免依赖传递带来的不确定性)
- 常用插件组合:
- compiler / surefire / jar / spring-boot / docker / sonar / jacoco
- 私服:Nexus / Artifactory / Archiva
- 常用属性:
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- 加速:
-T 1C并行构建、阿里云镜像、梯度缓存
6. 学习进阶路线建议
| 阶段 | 目标 | 重点练习 |
|---|---|---|
| 1-2 周 | 入门 | 安装 + 创建项目 + 依赖引入 + 打包运行 |
| 2-4 周 | 中级 | 多模块 + 依赖范围 + 生命周期理解 + 常用插件 |
| 1-2 月 | 高级 | 自定义插件 + 私服搭建 + 父 pom 治理 + archetype |
| 持续 | 精通 | 依赖冲突分析 + enforcer 插件规范 + CI/CD 集成 |
有任何具体问题(比如:依赖冲突怎么排、如何写自定义插件、Spring Boot 与 Maven 的最佳配合、如何做分环境配置等),欢迎直接问,我可以带你一步步实战!