`<dependencyManagement>`内部的`<dependencies>`和外部的`<dependencies>`的区别:
1. dependencyManagement 内的 dependencies
作用:
- 依赖版本管理:统一管理依赖的版本号
- 不会实际引入依赖:仅仅是声明版本信息
- 提供默认配置:为子模块或实际依赖提供默认的版本和配置
特点:
<dependencyManagement><dependencies><dependency><groupId>com.jd.rec</groupId><artifactId>graph-log-java</artifactId><version>0.2.27</version> <!-- 定义版本 --></dependency></dependencies>
</dependencyManagement>
- 📋 仅声明,不引入
- 🎯 版本控制中心
- 🔧 配置模板
2. 外部的 dependencies
作用:
- 实际引入依赖:真正将jar包添加到项目中
- 可以省略版本号:如果在dependencyManagement中已定义
- 可以覆盖配置:添加额外的exclusions等
特点:
<dependencies><dependency><groupId>com.jd.rec</groupId><artifactId>graph-log-java</artifactId><!-- 版本号省略,使用dependencyManagement中定义的0.2.27 --><exclusions><exclusion><groupId>com.jd.jrf</groupId><artifactId>config</artifactId></exclusion></exclusions></dependency>
</dependencies>
- ✅ 实际引入依赖
- 🔄 继承版本信息
- ➕ 可添加额外配置
3. 工作流程示例
<!-- 第一步:在dependencyManagement中声明版本 -->
<dependencyManagement><dependencies><dependency><groupId>com.jd.rec</groupId><artifactId>graph-log-java</artifactId><version>0.2.27</version> <!-- 统一版本管理 --></dependency></dependencies>
</dependencyManagement><!-- 第二步:在dependencies中实际引入 -->
<dependencies><dependency><groupId>com.jd.rec</groupId><artifactId>graph-log-java</artifactId><!-- 自动使用上面定义的0.2.27版本 --><exclusions><!-- 添加特定的排除配置 --><exclusion><groupId>com.jd.jrf</groupId><artifactId>config</artifactId></exclusion></exclusions></dependency>
</dependencies>
4. 主要优势
方面 | dependencyManagement | dependencies |
---|---|---|
作用 | 版本管理中心 | 实际依赖引入 |
是否引入jar | ❌ 不引入 | ✅ 引入 |
版本管理 | 📋 定义版本 | 🔄 继承或覆盖版本 |
适用场景 | 多模块项目统一管理 | 单个模块具体使用 |
5. 实际效果
在你的配置中:
dependencyManagement
定义了graph-log-java
的版本为0.2.27
dependencies
中实际引入了graph-log-java
,自动使用0.2.27
版本- 同时在实际引入时添加了额外的
exclusions
配置
这种方式既保证了版本的统一管理,又允许在具体使用时进行个性化配置。