使用场景
定义在parent项目中,管理children中引入的依赖版本信息
定义来说比叫简单,既然在父项目中定义了
创建maven项目,项目结构
wangshuyu-center
- wangshuyu-center-api
- wangshuyu-center-server
- wangshuyu-center-dao
wangshuyu-center pom.xml
中引入了 dependencyManagement
<!-- wangshuyu-center pom.xml -->
<dependencyManagement >
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
wangshuyu-center-server
引入 wangshuyu-center pom.xml
<!-- wangshuyu-center-server pom.xml -->
<parent>
<artifactId>wangshuyu-center</artifactId>
<groupId>com.wangshuyu.center</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
此时在 External Libraries
中是没有 spring-jdbc
的 jar
如果module中需要使用 dependencyManagement 中的依赖,需要在自己的 pom.xml 中引入
<!-- wangshuyu-center-server pom.xml -->
<parent>
<artifactId>wangshuyu-center</artifactId>
<groupId>com.wangshuyu.center</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<!-- 这里不需要再定义version,会使用management中的 -->
<!-- 如果定义了version则优先使用自定义的,最短路径原则 -->
</dependency>
</dependencies>
比较有意思的是,如果我在wangshuyu-center-server
中引入新的version
当满足下面两个条件时,会标红
-
该
version
在本地仓库中是不存在的; -
子pom中没有引入该依赖;
结论:dependencyManagement中的定义的依赖不会自动去从远程仓库下载,只有当module引入该依赖时才会去从远程仓库下载。
其实也很好理解,dependencyManagement是规范版本信息,所定义的依赖module中并不一定会使用,只有当module使用时才需要导入。
更进一步
dependencyManagement中的依赖来源:从module中提取
当在开发module时,需要对新引入的dependency做版本管理时,使用dependencyManagement,将module中的version放在父项目中管理。