JavaWeb 开发—— Maven 快速入门
一、Maven的诞生
以往的开发场景每个项目都有自己独特的构建脚本,依赖管理完全依赖手动下载JAR包,团队成员之间的项目结构千差万别,好比每个厨师都用自己的方式组织厨房,导致换个厨师就找不到调料在哪里。
Maven(意为"知识的积累者")在2004年由Apache软件基金会推出,它不仅仅是一个构建工具,更是一种项目管理哲学。Maven的核心理念是约定优于配置(Convention over Configuration),虽然限制了一些自由度,但极大地提升了整体效率和可维护性。
Maven解决了哪些问题?
| 传统构建方式的问题 | Maven的解决方案 | 实际影响 |
|---|---|---|
| 依赖管理混乱,JAR包到处散落 | 中央仓库+坐标系统 | 依赖自动下载,版本冲突可追溯 |
| 构建脚本各异,学习成本高 | 标准化生命周期 | 新项目5分钟上手,无需学习新脚本 |
| 项目结构不统一 | 标准目录结构 | 团队协作零障碍,IDE自动识别 |
| 多模块项目管理困难 | 继承与聚合机制 | 大型项目统一管理,版本一致性保证 |
| 构建过程不透明 | 插件化架构 | 每个步骤可见可控,易于扩展 |
二、Maven的特点
2.1 约定优于配置
Maven最革命性的特点就是它的标准化项目结构。这不是简单的文件夹规范,而是一种思维方式的转变。
下面是Maven项目的大致结构:
project-root/
├── src/
│ ├── main/
│ │ ├── java/ # 主代码源文件
│ │ ├── resources/ # 配置文件、静态资源
│ │ └── webapp/ # Web应用资源(如果是Web项目)
│ └── test/
│ ├── java/ # 测试代码
│ └── resources/ # 测试资源
├── target/ # 编译输出目录(自动生成)
└── pom.xml # 项目对象模型配置文件
这使得开发者无需阅读文档就能理解项目结构,IDE也能自动识别并提供智能支持,为开发提供了极大的便利!
2.2 依赖管理
Maven使用 Project Object Model(项目对象模型)(本质是项目里的pom.xml完整 XML 文件,Maven 项目的总控入口)中的GAV坐标系统来唯一标识每个依赖:
| 坐标元素 | 含义 | 示例 | 类比理解 |
|---|---|---|---|
| GroupId | 组织/公司的唯一标识 | com.alibaba | 国家/省份 |
| ArtifactId | 项目/模块名称 | fastjson | 城市/街道 |
| Version | 版本号 | 2.0.32 | 门牌号 |
举例添加一个 GAV:
<dependency>
<groupId>com.alibaba</groupId> //组织名称(通常为域名反写)
<artifactId>fastjson</artifactId> //模块名称
<version>2.0.32</version> //版本号(通常为release正式发布版本以及snapshot测试不稳定版本)
</dependency>
-- Maven 会自动:
-- 从中央仓库(或配置的私有仓库)下载 fastjson-2.0.32.jar
-- 解决并下载该版本 fastjson 内部依赖的其他库(传递依赖)
-- 将所有依赖统一管理在本地仓库(.m2 目录),避免项目中堆积 JAR 文件
依赖传递性是Maven的另一个精妙设计。当你引入Spring框架时,它所依赖的commons-logging等库会自动被引入,形成一个依赖树。当你不需要某个依赖时,需要排除依赖:
<!-- 配置依赖-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.2.16</version>
<!-- 排除依赖-->
<exclusions>
<exclusion>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-observation</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2.3 生命周期
其定义了一套标准化的项目构建全流程,统一了Java项目的清理、编译、测试、打包、安装、部署等操作的执行规范。下面是Maven的常用阶段:
| 阶段 | 核心作用 |
|---|---|
| clean | 清理阶段,移除上一次项目构建生成的文件(默认是项目的target目录),避免旧文件干扰新的构建过程 |
| validate | 验证阶段,校验项目结构是否正确、构建所需的必要信息是否完整,是构建流程的前置校验 |
| compile | 编译阶段,将项目src/main/java下的Java源代码编译为.class字节码文件,输出到target/classes目录 |
| test | 测试阶段,执行src/test/java下的单元测试代码(常用JUnit框架),执行前会自动触发compile阶段,保证测试的是最新代码 |
| package | 打包阶段,将编译后的代码,按照pom.xml配置的打包类型(jar、war等),打成对应的安装包,输出到target目录 |
| verify | 验证阶段,对打包结果进行校验,确保包文件有效、符合质量标准 |
| install | 安装阶段,将打包好的项目安装到本地Maven仓库,供本地其他Maven项目直接作为依赖引用 |
| site | 站点阶段,自动生成项目的站点文档(包含项目信息、测试报告、依赖分析报告等) |
| deploy | 部署阶段,将打包好的项目上传到远程私服/中央仓库,供团队内其他开发者、线上环境引用 |
在同一套生命周期中,执行后面的阶段时,它前面的所有阶段都会按顺序自动执行。点击执行install时,Maven会按顺序自动执行 validate → compile → test → package → verify → install,执行package时,会自动先执行编译、测试等前置环节,保证打包的是最新、且测试通过的代码。
Maven有三套相互独立的生命周期:
- clean生命周期:负责项目清理,核心是
clean阶段 - default生命周期:负责项目核心构建,是
validate到deploy的核心流程 - site生命周期:负责项目站点文档生成,核心是
site阶段
2.4 仓库机制
Maven的仓库系统采用三级缓存架构,这种设计在性能和灵活性之间达到了完美平衡:
本地仓库(Local Repository)
↓ 如果未找到
私服/镜像仓库(Private/Mirror Repository)
↓ 如果未找到
中央仓库(Central Repository)
| 仓库类型 | 位置 | 作用 | 访问速度 |
|---|---|---|---|
| 本地仓库 | ~/.m2/repository | 本机缓存,避免重复下载 | 极快(本地磁盘) |
| 私服仓库 | 公司内网 | 企业内部共享,加速+安全控制 | 快(局域网) |
| 中央仓库 | Maven Central | 全球公共依赖库 | 较慢(互联网) |
- 首先会查找本地仓库,若存在所需 jar 包直接使用;
- 若本地仓库没有,则从私服中查找,若存在所需 jar 包,下载到本地仓库使用;
- 若私服没有,则从中央仓库中下载到私服,再从私服下载到本地仓库
三、Maven下载与安装
3.1 JDK检查
Maven是用Java编写的,因此需要先安装JDK。
检查JDK安装:
java -version
你应该看到类似输出:

如果没有安装JDK,请先前往Oracle官网或使用OpenJDK。
3.2 下载Maven
访问Maven官方网站:https://maven.apache.org/download.cgi
你会看到多个下载选项:
| 文件类型 | 适用系统 | 说明 |
|---|---|---|
| apache-maven-x.x.x-bin.zip | Windows | 二进制发行版,包含可执行文件 |
| apache-maven-x.x.x-bin.tar.gz | Linux/Mac | 二进制发行版,Unix格式压缩 |
| apache-maven-x.x.x-src.zip | 所有系统 | 源代码版本,用于学习或自定义编译 |
推荐下载:选择最新稳定版的bin版本(例如:apache-maven-3.9.5-bin.zip)
3.3 安装配置详解(Windows系统)
-
解压文件
将下载的zip文件解压到一个没有空格和中文的路径,例如:D:\DevTools\apache-maven-3.9.5注意路径中不要出现空格和中文!!! -
配置环境变量
这一步是让系统能在任何位置识别
mvn命令:-
打开控制面板,环境变量:

-
新建系统变量:

变量名:MAVEN_HOME 变量值:D:\DevTools\apache-maven-3.9.5(你保存的路径) -
编辑系统变量
Path,添加:
%MAVEN_HOME%\bin(如图)
-
-
验证安装
打开新的命令提示符窗口(必须是新窗口,旧窗口不会加载新的环境变量),执行:
mvn -version成功输出示例:

四、Maven配置
4.1 settings.xml(下载完Maven后配置)
settings.xml是Maven的全局配置文件,位于两个位置:
| 位置 | 路径 | 优先级 | 适用场景 |
|---|---|---|---|
| 全局配置 | ${MAVEN_HOME}/conf/settings.xml | 低 | 所有用户共享的配置 |
| 用户配置 | ~/.m2/settings.xml | 高 | 个人定制配置 |
- 先在maven的下载目录下新建仓库:
mvn_resp - 找到
settings.xml中的localRepository:
//本地仓库路径,将中间的路径改为自己设置的仓库路径
<localRepository>D:\DevTools\apache-maven-3.9.9\mvn_resp</localRepository>
4.1.1 远程仓库配置
- 在
settings.xml中,找到mirror标签,默认镜像源是国外镜像源,需要修改为国内镜像源:
//修改为阿里云镜像代码
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
4.1.2 配置 idea
更改idea的全局配置,打开设置->构建->Maven,将相关路径修改如下:

4.2 pom.xml
pom.xml(Project Object Model)定义了项目的所有元数据、依赖关系和构建配置。
4.2.1 基础结构
<?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">
<!-- POM模型版本,固定为4.0.0 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标:唯一标识这个项目 -->
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!-- 打包方式:jar/war/pom -->
<packaging>jar</packaging>
<!-- 项目元信息 -->
<name>My Application</name>
<description>一个示例Maven项目</description>
<url>https://www.example.com</url>
<!-- 属性定义:统一管理版本号 -->
<properties>
<java.version>1.8</java.version>
<spring.version>5.3.20</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖管理 -->
<dependencies>
<!-- 具体依赖配置 -->
</dependencies>
<!-- 构建配置 -->
<build>
<!-- 插件配置 -->
</build>
</project>
4.2.2 版本号
Maven推荐使用语义化版本(Semantic Versioning):
主版本号.次版本号.修订号-限定符
例如:1.2.3-SNAPSHOT
| 版本部分 | 含义 | 何时递增 | 示例 |
|---|---|---|---|
| 主版本号 | 重大变更,可能不兼容 | API重大改变 | 1.x.x → 2.0.0 |
| 次版本号 | 新增功能,向后兼容 | 添加新特性 | 1.2.x → 1.3.0 |
| 修订号 | Bug修复,完全兼容 | 修复问题 | 1.2.3 → 1.2.4 |
限定符说明:
SNAPSHOT:快照版本,开发中的不稳定版本RELEASE:正式发布版本RC(Release Candidate):候选发布版本BETA:测试版本ALPHA:内部测试版本
4.2.3 依赖配置详解
<dependencies>
<!-- 基础依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 测试依赖:仅在测试时使用 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope> <!--scope设置依赖范围-->
</dependency>
<!-- 可选依赖:不会传递给依赖此项目的其他项目 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<optional>true</optional> <!--optional为可选依赖-->
</dependency>
<!-- 排除传递依赖:解决版本冲突 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
依赖作用域(Scope)常用取值:
| scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
|---|---|---|---|---|
| compile(默认) | Y | Y | Y | log4j |
| test | - | Y | - | junit |
| provided | Y | Y | - | servlet-api |
| runtime | - | Y | Y | jdbc驱动 |
五、Maven使用
5.1 创建Maven项目
IntelliJ IDEA 创建:
- 创建一个空项目,指定项目名称:

- 新建一个模块,选择Maven语言,选择你安装的jdk版本:


- 在
新建模块/src/main/java下新建java类,进行代码编写…
5.2 导入Maven项目
在IntelliJ IDEA中导入:
- 方式一(推荐):
a. 打开IDEA → 点击右侧 Maven面板(若无:View → Appearance → Tool Window Bars)
b. 点击+号 → 选择目标项目的pom.xml→ 双击导入 - 方式二(中文模式):
a.文件 → 项目结构→ 点击+号
b. 选择导入模块→ 定位到项目的pom.xml→ 确认
- 请确保项目根目录包含
pom.xml(Maven核心配置文件)。- 导入后IDE会自动下载
pom.xml中定义的依赖(需联网)。若依赖缺失,手动触发Maven命令:bash mvn clean install
5.3 Maven使用运行
在 idea 中打开Maven的控制面板展开生存期,双击即可进行相应操作,这里讲解maven命令进行操作:Maven的命令遵循mvn [插件]:[目标]或mvn [生命周期阶段]的格式。
5.2.1 清理与编译
# 清理项目:删除target目录
mvn clean
# 编译主代码:src/main/java → target/classes
mvn compile
# 编译测试代码:src/test/java → target/test-classes
mvn test-compile
5.2.2 测试相关命令
# 运行所有测试
mvn test
# 跳过测试
mvn package -DskipTests
# 跳过测试编译和执行
mvn package -Dmaven.test.skip=true
# 运行指定测试类
mvn test -Dtest=UserServiceTest
# 运行指定测试方法
mvn test -Dtest=UserServiceTest#testLogin
测试报告位置:target/surefire-reports/
5.2.3 打包与安装
# 打包项目:生成jar/war文件
mvn package
# 安装到本地仓库:其他项目可以依赖
mvn install
# 部署到远程仓库:供团队其他成员使用
mvn deploy
# 组合命令:清理+编译+测试+打包
mvn clean package
# 完整构建流程
mvn clean install
打包结果示例:
target/
├── my-app-1.0.0-SNAPSHOT.jar # 最终产物
├── classes/ # 编译后的class文件
├── test-classes/ # 测试class文件
├── maven-archiver/ # 打包元信息
└── surefire-reports/ # 测试报告
5.2.4 依赖管理命令
# 查看依赖树:分析依赖关系
mvn dependency:tree
# 查看依赖树(详细版本信息)
mvn dependency:tree -Dverbose
# 分析依赖冲突
mvn dependency:analyze
# 下载依赖源码
mvn dependency:sources
# 下载依赖文档
mvn dependency:resolve -Dclassifier=javadoc
# 复制依赖到指定目录
mvn dependency:copy-dependencies -DoutputDirectory=lib
5.2.5 项目信息命令
# 生成项目站点文档
mvn site
# 查看有效POM(包含继承和默认配置)
mvn help:effective-pom
# 查看有效settings
mvn help:effective-settings
# 查看插件信息
mvn help:describe -Dplugin=compiler
# 查看项目依赖更新
mvn versions:display-dependency-updates
# 查看插件更新
mvn versions:display-
更多推荐
所有评论(0)