Maven 核心知识总结:依赖、聚合、继承与多环境配置详解(黑马网课ssm总结)(day7)
·
📚 目录(点击跳转对应章节)
一、依赖管理(Dependency)
二、聚合(Aggregation)
三、继承(Inheritance)
四、聚合 vs 继承
五、属性(Properties)
六、多环境开发(Profiles)
七、测试控制
总结
一、依赖管理(Dependency)
1. 依赖传递与冲突

依赖传递是 Maven 的核心能力之一:
如果 A 依赖 B,B 依赖 C,那么 A 会自动依赖 C。
但这也容易带来 依赖冲突问题,常见原因包括:
- 不同依赖引入了同一个 jar 的不同版本
- 依赖层级过深,版本难以控制
👉 Maven 默认遵循:
- 路径最短优先
- 路径相同则 先声明优先
2. 可选依赖(<optional>)

在 Maven 中,可以通过 <optional> 标签控制 依赖是否向下游项目传递。
💡 注意:Maven 中
<optional>的默认值是false。也就是说,如果你不写<optional>,就等同于<optional>false</optional>。
核心结论
<optional>的本质:控制依赖是否被传递
对比说明
| 配置 | 是否传递给下游 | 说明 |
|---|---|---|
<optional>true</optional> |
❌ 不传递 | 当前项目用,下游不一定需要 |
<optional>false</optional> 或不写 |
✅ 传递 | 下游必须依赖的核心功能 |
💡 注意:
<optional>默认值是 false- 不写
<optional>等同于普通依赖
适用场景
- 插件式功能
- 可选格式支持
- 运行时扩展组件
3. 排除依赖(<exclusions>)

当使用别人的依赖,但其中包含你不需要或冲突的依赖时,可以使用排除。
<exclusions>
<exclusion>
<groupId>xxx</groupId>
<artifactId>yyy</artifactId>
</exclusion>
</exclusions>
经验总结
给别人用 → 用 optional
用别人的 → 用 exclusions
二、聚合(Aggregation)
1. 什么是聚合?
聚合是为了 统一构建多个模块,本身不关心依赖关系。
2. 聚合工程的创建步骤
(1)创建 Maven 模块,打包方式为 pom
<packaging>pom</packaging>
(2)在父工程中声明子模块
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>
注意事项
<module>写的是 相对路径- 聚合工程本身 不参与业务代码

三、继承(Inheritance)
1. 什么是继承?
继承用于:
- 统一管理依赖版本
- 统一插件配置
- 统一属性定义
2. 继承的完整流程
(1)创建父工程(packaging=pom)
(2)父工程中定义公共依赖(或依赖管理)

(3)父工程声明“可被子工程选择的依赖”

仅管理版本,不真正引入
(4)子工程声明父工程
<parent>
<groupId>xxx</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<!--填写父工程的pom文件-->
<relativePath>父工程的pom文件路径</relativePath>
</parent>
(5)子工程按需选择依赖(无需写版本)
<dependency>
<groupId>xxx</groupId>
<artifactId>yyy</artifactId>
</dependency>
注意点
-
子工程会 自动继承 父工程的:
dependencyManagementpropertiespluginManagement
四、聚合 vs 继承
| 对比项 | 聚合 | 继承 |
|---|---|---|
| 关注点 | 构建顺序 | 配置复用 |
| 是否有父子关系 | ❌ | ✅ |
| 是否影响依赖 | ❌ | ✅ |
是否必须 pom |
是 | 是 |
| 使用目的 | 一次构建多个模块 | 统一版本与配置 |
👉 实际项目中通常两者一起使用
五、属性(Properties)
1. 统一管理依赖版本
(1)父工程中定义属性
<properties>
<spring.version>5.3.30</spring.version>
</properties>
(2)使用占位符引用
<version>${spring.version}</version>
📌 好处:
- 一处修改,全局生效
- 版本管理清晰
2. 资源文件中引用属性
(1)定义可用于资源文件的属性
<properties>
<jdbc.url>xxx</jdbc.url>
</properties>
(2)在资源文件中使用
jdbc.url=${jdbc.url}
(3)开启资源过滤
<resources>
<resource>
<filtering>true</filtering>
</resource>
</resources>
3. 其他属性
例如:

六、多环境开发(Profiles)
1. 定义多环境
<profiles>
<profile>
<id>dev</id>
</profile>
<profile>
<id>prod</id>
</profile>
</profiles>
2. 使用指定环境
mvn clean package -Pdev
或在 settings.xml 中配置默认激活。
<activation>
<activeByDefault>true</activeByDefault>
</activation>
七、测试控制
1. 跳过所有测试
mvn package -DskipTests
或:
<skipTests>true</skipTests>
⚠️ 注意:
skipTests:编译测试代码,但不执行maven.test.skip=true:连测试代码都不编译
2. 细粒度控制测试

可针对:
- 单元测试
- 集成测试
- 插件级别控制
总结
本文系统梳理了 Maven 中最核心、最常用的机制:
- ✅ 依赖传递与冲突解决
- ✅ 可选依赖与排除依赖的使用策略
- ✅ 聚合与继承的本质区别
- ✅ 属性统一管理
- ✅ 多环境开发与测试控制
一句话总结:
Maven 的强大不在于“写依赖”,而在于 管理复杂工程结构的能力。
更多推荐




所有评论(0)