Maven高级——继承与聚合

发布时间 2023-03-27 15:09:59作者: 风陵南

继承与聚合

聚合

  • 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
  • 聚合工程:通常是一个不具有业务功能的”空“工程(有且仅有一个pom文件)
  • 作用:使用聚合工程可以将多个工程模块编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
    • 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题

  

聚合工程开发步骤

创建Maven模块,设置打包类型为pom

<packaging>pom</packaging>

每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war

设置当前聚合工程包含的子模块

<modules>
    <module>../maven_01_ssm</module>
    <module>../maven_02_pojo</module>
    <module>../maven_03_dao</module>
</modules>

聚合工程中包含的模块在进行构建时会根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关参与聚合的工程无法向上感知是否参与聚合,智能向下配置哪些模块参加本工程的聚合

 

继承

  • 概念:继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
  • 作用:
    • 简化配置
    • 减少版本冲突

开发过程

  • 将聚合工程作为父工程,在父工程的pom配置文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
    
    ...
    
</dependencies>
  • 在父工程中配置子工程可选的依赖关系
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 在子工程中配置当前工程所继承的父工程
<!--    定义该工程的父工程-->
    <parent>
        <groupId>com.cqupt</groupId>
        <artifactId>maven_00_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
<!--        填写父工程的相对路径-->
        <relativePath>../maven_00_parent/pom.xml</relativePath>
    </parent>
  • 在子工程中配置使用父工程中可选依赖的坐标
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

子工程中使用父工程中的可选依赖时仅需提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突

子工程中还可以定义父工程中没有定义的依赖关系

 

聚合与继承的区别

作用

  • 聚合用于快速构建项目
  • 继承用于快速配置

相同点

  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
  • 聚合与继承均属于设计型模块,并无实际的模块内容

不同点:

  • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
  • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己