Maven中pom文件内scope标签中import、parent 、dependencies、dependencyManagement详解

**首先介绍parent**
如果父项目中有这些依赖
    
       
           
                AAA
                AAAA
                Greenwich.RELEASE
                pom
           

       

   

   
       
            BBB
            BBB
             8.2.0
       

       
            CCC
            CCC
             8.2.0
       

   

    **parent:**复用父类元素也就是    这个标签里面的依赖!
**dependencyManagement:**子模块中可以选择性继承父类的依赖,此标签中的依赖子pom不会自动继承,子pom需要额外声明。但是,当依赖版本在父POM中声明后,子模块在使用依赖的时候就无须声明版本,确保版本一致。
**Import:**只在dependencyManagement元素下才有效果,作用是将目标POM中的dependencyManagement配置导入并合并到当前POM的dependencyManagement元素中。

如果子项目中引用

        父项目
        e-parent
        1.0.0-SNAPSHOT
        ../e-parent
   

则子项目中会引入**BBB**和CCC依赖

如果子项目中

 
       
           
           
                父项目
                父项目
                Greenwich.RELEASE
                pom
                import
           

       

   

则子项目中会引入**AAA**

好处:

在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

总结:

这种复用可以针对两种依赖,一种是定义在 中的 ,这种是无条件继承的;还有一种是定义在 中的 ,这种的如果要在子类中使用,需要手动声明,只需要声明 groupId 和 artifactId 就行,版本则不必声明。

使用 parent 一可以实现复用,二还可以统一管理依赖的版本。

import 能实现类似的功能,它能够解决 parent 不能实现的部分问题,比如多继承。但是相比 parent,它只能作用于 元素,它所实现的就是能将目标中的配置导入当前 pom 中,但是不包括插件管理 plugin management。

你可能感兴趣的:(maven相关,maven)