Maven的pom.xml文件是项目对象模型的核心配置文件,所有项目的依赖、构建规则、插件配置都在这个文件中定义,其中依赖配置是最基础也最常用的部分,直接决定了项目可以引入哪些第三方库。

pom.xml依赖的基本结构
在pom.xml中,所有依赖都放在<dependencies>标签内部,每个单独的依赖使用<dependency>标签定义,一个基础的依赖配置包含三个核心坐标参数,这三个参数可以唯一确定一个第三方库。
<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>com.example</groupId>
<artifactId>demo-project</artifactId>
<version>1.0.0</version>
<dependencies>
<!-- 单个依赖配置示例 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>
</project>
依赖坐标的三个核心参数
- groupId:组织标识,通常是公司或组织的反向域名,比如org.springframework、com.google.guava
- artifactId:项目标识,是该组织下的具体项目或模块名称,比如spring-core、guava
- version:版本号,指定要引入的库的版本,比如4.13.2、2.7.0
依赖的常用可选配置参数
除了三个核心坐标,依赖还可以配置其他参数来调整依赖的行为,最常用的参数包括scope、optional、exclusions。
依赖范围scope
scope参数用来指定依赖的作用范围,不同范围的依赖会在不同的构建阶段生效,也会被不同的类路径加载,常见的scope取值如下:
| scope取值 | 生效阶段 | 是否参与打包 | 典型场景 |
|---|---|---|---|
| compile | 编译、测试、运行 | 是 | 默认取值,大部分业务依赖都用这个 |
| test | 测试 | 否 | 单元测试框架如junit、mockito |
| provided | 编译、测试 | 否 | 容器提供的依赖如servlet-api、jsp-api |
| runtime | 测试、运行 | 是 | 数据库驱动如mysql-connector-java |
配置scope的示例如下,这里指定junit只在测试阶段生效:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
可选依赖optional
optional参数用来标记该依赖是否为可选依赖,默认值为false。如果设置为true,那么这个依赖不会被传递到依赖当前项目的其他项目中。
比如当前项目引入了数据库驱动依赖,并且标记为optional,那么其他项目引入当前项目时,不会自动获得这个数据库驱动的依赖,需要自己手动添加。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<optional>true</optional>
</dependency>
依赖排除exclusions
有时候引入的依赖会自带一些我们不需要的传递依赖,这时候可以使用exclusions参数把这些传递依赖排除掉,避免依赖冲突。
比如引入spring-boot-starter-web时,会默认传递引入spring-boot-starter-logging,如果我们想用log4j2而不是默认的日志框架,就可以排除这个传递依赖:
<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-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖传递与冲突处理
Maven的依赖是有传递性的,比如项目A依赖B,B依赖C,那么项目A会自动获得C的依赖,不需要手动配置。但是如果同一个依赖出现了多个版本,就会产生依赖冲突,Maven默认使用最短路径优先和先声明优先的原则来处理冲突。
如果冲突的版本路径长度不同,路径短的版本会被采用;如果路径长度相同,那么在pom.xml中先声明的版本会被采用。
如果需要手动指定某个依赖的版本,可以使用<dependencyManagement>标签来统一管理依赖版本,这个标签里的依赖不会直接引入,但是可以规定子模块或者依赖传递时的版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>
</dependencies>
</dependencyManagement>
常见配置注意事项
- 不要随意使用latest或者release作为版本号,这些动态版本会导致构建结果不可控,建议使用固定版本号
- 如果不确定某个依赖的坐标,可以到Maven中央仓库搜索对应的库,复制官方提供的配置片段
- 定期使用mvn dependency:tree命令查看项目的依赖树,及时发现不必要的依赖和依赖冲突
- 多模块项目中,建议把公共的依赖版本放在父项目的dependencyManagement中统一管理,避免版本不一致
正确配置pom.xml的依赖可以让项目的依赖管理更清晰,减少依赖冲突问题,提升项目的可维护性。
Mavenpom.xml依赖配置dependency坐标修改时间:2026-07-18 04:27:30