[Maven] 聚合与继承

概述

Maven项目的核心就是一个pom.xml配置文件,也可以反过来看,一个pom.xml就是一个Maven项目。

如果Maven项目只有一个,那么聚合和继承就都没有了意义。

聚合和继承都是针对Maven多项目多模块管理的:

  1. 聚合的作用是简化多模块的构建过程
  2. 继承的目的是精简pom.xml文件的重复配置。

Maven提倡“约定优于配置”,使用聚合和继承特性管理多模块的时候,通常会构建一个父子级的项目目录结构:

pom.xml        -- 父级Maven项目:example-parent
	pom.xml    -- 子级Maven项目:example-a
	pom.xml    -- 子级Maven项目:example-b
	pom.xml    -- 子级Maven项目:example-c

基于这样的一个约定的Maven项目结构,我们来说说聚合和继承的使用方法。

聚合

父级项目的pom.xml精简配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>example-parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>

  <!-- modules就是聚合的配置 -->
  <modules>
    <module>example-a</module>
    <module>example-b</module>
    <module>example-c</module>
  </modules>

</project>

这段配置有两个要点:

  1. packaging为pom,表示这是Maven的组织项目,是起管理作用的,pom全称是Project Object Model
  2. module就是多个被管理的子项目,或者叫子模块,其值是子模块相对于父级pom.xml文件的相对路径

有了这段配置,Maven的多模块构建过程就简单了。

构建的过程就是Maven的生命周期:清理、验证、编译、测试、打包、检查、安装、部署。

  1. 对父级项目执行清理,各个子模块也会被清理
  2. 对父级项目执行编译,各个子模块也会被编译
  3. 对父级项目执行测试、各个子模块也会被测试
  4. 对父级项目执行打包,各个子模块也会被打包
  5. 依次类推,Maven生命周期的所有过程都是一样的道理

如果Maven没有聚合能力,每个子模块就需要单独执行生命周期的各个阶段,那么,执行构建的过程必然存在大量重复性的工作。

对于一个优秀的程序员来说,重复就意味的设计的不合理!

继承

父级项目的pom.xml精简配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>example-parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>

</project>

这段配置核心就一个:

  1. packaging为pom,表示这是Maven的组织项目,是起管理作用的,pom全称是Project Object Model

继承的核心配置体现在子模块的pom.xml文件中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.example</groupId>
        <artifactId>example-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <artifactId>example-a</artifactId>
    
</project>

子模块配置pom.xml核心有两个:

  1. parent节点声明了父级管理项目,证明这是个子模块,父子关系由此建立
  2. Maven坐标少了groupId和version配置,因为这两个属性可从父亲那里“继承”

父子关系有了,属性也可以继承,那么,子模块里的相同配置就都可以提取到父级pom.xml文件中,这就消除了子模块里的重复配置。

对于一个优秀的程序员来说,重复配置必须消除!

至于pom.xml文件里有哪些配置可以继承,就请自行百度,不展开了。

总结

  1. 聚合和继承是Maven管理能力的一体两面,目的都是为了“消除重复”,可以一起使用
  2. 聚合是为了提高多模块的构建效率
  3. 继承是为了精简pom.xml的配置内容
  4. 聚合和继承的项目结构不一定非要是父子,也可以是其它目录结构,区别就是多点配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值