【Maven】03 ——Maven 继承,聚合,依赖

1.继承
在构建多个模块的时候,往往会多有模块有相同的groupId、version,或者有相同的依赖,为了减少pom文件的配置,跟我们的项目中类的继承一样,在父工程中配置了pom,子项目中的pom可以继承

继承POM的用法
面向对象设计中,程序员可以通过一种类的父子结构,在父类中声明一些字段和方法供子类继承,这样可以做到“一处声明、多处使用”,类似的我们需要创建POM的父子结构,然后在父POM中声明一些配置,供子POM继承。

子工程gropid 和version没写,是因为子工程的groupid 和version 和父工程的一样.所以子工程继承了父工程,但是当子工程的groupid ,version和父工程的不一样的时候,就需要自己重写.父模块只是为了帮助消除配置的重复,因此它本身不包含除POM之外的项目文件,也就不需要src/main/java之类的文件夹了。

integral-kernel-parent
    pom

    
    com.dmsdbj.cloud
    cloud-integral-parent
    0.0.2-SNAPSHOT
    

在父pom 中定义了整个项目所需要的依赖,如tools等.


        
            com.dmsdbj.cloud
            cloud-tool
            0.0.2-SNAPSHOT
            provided
        

        
            org.projectlombok
            lombok
            provided
        

    

可继承的POM元素

groupId:项目组ID,项目坐标的核心元素
version:项目版本,项目坐标的核心元素
description:项目的描述信息
organnization:项目的组织信息
inceptionYear:项目的创始年份
url:项目的URL地址
developers:项目的开发者信息
dependencies:项目的依赖配置
dependencyManagement:项目的依赖管理配置
repositories:项目的仓库配置
build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等

依赖管理
当多有模块中有相同的依赖时,我们可以将这些依赖提取出来,同一在父POM中声明,这样就可以简化子模块的配置了,但是这样还是存在问题,当想在项目中加入一些,不需要这么多依赖的模块,如果让这个模块也依赖那些不需要的依赖,显然不合理。

Maven提供的dependentcyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活度。在dependentcyManagement元素下的依赖声明不会引入实际的依赖,而是定义了依赖的版本,对版本进行同一管理,避免出现版本不一致的情况:


        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot-dependencies.version}
                pom
                import
            

            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud-dependencies.version}
                pom
                import
            
  

dependencyManagement声明的依赖既不会给项目引入依赖,也不会给它的子模块引入依赖,不过这段配置是会被继承的。真正地引入到项目中是在子项目的pom文件中进行定义声明的.dependencyManagement声明依赖能够统一规范项目中依赖的版本,当依赖的版本在父POM中声明之后,子模块在使用依赖的时候就无效声明版本,也就不会发生多个子模块使用依赖版本不一致的情况。这可以降低依赖冲突的几率。

2.聚合
在我们的项目中有controller,service,dao层,每一个里面都有pom文件,在构建的需要把每一个都进行构建,但是有了聚合,我们创建一个额外的模块。然后通过该模块,来构建整个项目的所有模块把他们聚合到一起,能够使用一条命令就构建多个模块,聚合工程的结构如下:
【Maven】03 ——Maven 继承,聚合,依赖_第1张图片

pom文件如下:

    
        e3-parent
        cn.e3mall
        1.0-SNAPSHOT
        ../e3parent/pom.xml
    

    4.0.0
    cn-manager
    1.0-SNAPSHOT

    
        e3-manager-pojo
        e3-manager-dao
        e3-manager-interface
        e3-manager-service
        e3-manager-web
    
    pom

一个特殊的地方就是packaging,其值为pom,如果没有声明的话,默认为jar,对于聚合模块来说,其打包方式必须为pom,否则无法构建。

modules里的每一个module都可以用来指定一个被聚合模块,这里每个module的值都是一个当前pom的相对位置。

3.继承与聚合的关系
继承是为了减少配置,配置是为了方便快速构建项目.
继承:在子工程的pom 文件中定义元素
聚合:它知道有哪些被聚合的模块,但那些被聚合的子模块不知道这个聚合模块的存在.
中的元素就是要被聚合的模块.
为了方便,有的工程既是聚合工程也是父工程.

你可能感兴趣的:(工具&工具类)