dependencies 和 dependencyManagement 的区别

dependencyManagement 的作用其实相当于一个对所依赖的 jar 包进行版本管理的管理器

在 maven 项目中,判断 jar 包的版本有两种途径

  1. 如果子项目的 标签的子标签 里面没有写 标签,那么 maven 就会自动到父项目的 标签里面去找有没有对该 artifactId 和 groupId 进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你 标签里面必须写一个 标签
  2. 如果子项目的 标签的子标签 里面写了 标签并指定了具体的版本,那么无论父项目的 标签中有无对该 jar 包的 version 声明,都以子项目的 version 为准

总结

  1. 如果在父项目中只写了 dependencies 标签,那么即使在子项目中没有写 dependencies 标签,子项目仍然会从父项目中继承父项目中写的所有依赖

  2. 如果在父项目中使用了 dependencyManagement 标签,并且在子项目中没有写 dependencies 标签,那么父项目的所有依赖都不会被子项目继承;子项目如果需要引入依赖,必须自己写,当然如果你引入的依赖在父项目中也有,那么你可以不指定版本号,版本号会自动从父项目中继承,包括 scope 也是,如果子项目自己指定了,那么就使用子项目自己的

  3. 所以说 dependencyManagement 其实只是声明依赖,并不实际引入任何依赖,因此文章开头才说,它其实只是个管理 jar 包版本的管理器

    //只是对版本进行管理,不会实际引入jar 
    <dependencyManagement> 
          <dependencies> 
                <dependency> 
                    <groupId>org.springframeworkgroupId> 
                    <artifactId>spring-coreartifactId> 
                    <version>3.2.7version> 
                dependency> 
        dependencies> 
    dependencyManagement> 
       
    //会实际下载jar包 
    <dependencies> 
           <dependency> 
                    <groupId>org.springframeworkgroupId> 
                    <artifactId>spring-coreartifactId> 
           dependency> 
    dependencies>
    

你可能感兴趣的:(后端)