记一次 dependencyManagement 问题解决


使用场景

定义在parent项目中,管理children中引入的依赖版本信息

定义来说比叫简单,既然在父项目中定义了

创建maven项目,项目结构

wangshuyu-center
- wangshuyu-center-api
- wangshuyu-center-server
- wangshuyu-center-dao

wangshuyu-center pom.xml中引入了 dependencyManagement




  
    
      org.springframework
      spring-jdbc
      4.3.7.RELEASE
    
  


wangshuyu-center-server 引入 wangshuyu-center pom.xml




  wangshuyu-center
  com.wangshuyu.center
  1.0-SNAPSHOT


此时在 External Libraries中是没有 spring-jdbc的 jar

如果module中需要使用 dependencyManagement 中的依赖,需要在自己的 pom.xml 中引入




  wangshuyu-center
  com.wangshuyu.center
  1.0-SNAPSHOT



  
    org.springframework
    spring-jdbc
    
    
  



比较有意思的是,如果我在wangshuyu-center-server中引入新的version

当满足下面两个条件时,会标红

  1. version在本地仓库中是不存在的;

  2. 子pom中没有引入该依赖;

结论:dependencyManagement中的定义的依赖不会自动去从远程仓库下载,只有当module引入该依赖时才会去从远程仓库下载。

其实也很好理解,dependencyManagement是规范版本信息,所定义的依赖module中并不一定会使用,只有当module使用时才需要导入。

更进一步

dependencyManagement中的依赖来源:从module中提取

当在开发module时,需要对新引入的dependency做版本管理时,使用dependencyManagement,将module中的version放在父项目中管理。