[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.0modelVersion>

  <groupId>org.examplegroupId>
  <artifactId>example-parentartifactId>
  <packaging>pompackaging>
  <version>1.0-SNAPSHOTversion>

  
  <modules>
    <module>example-amodule>
    <module>example-bmodule>
    <module>example-cmodule>
  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.0modelVersion>

  <groupId>org.examplegroupId>
  <artifactId>example-parentartifactId>
  <packaging>pompackaging>
  <version>1.0-SNAPSHOTversion>

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.0modelVersion>

    <parent>
        <groupId>org.examplegroupId>
        <artifactId>example-parentartifactId>
        <version>1.0-SNAPSHOTversion>
    parent>
    
    <artifactId>example-aartifactId>
    
project>

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

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

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

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

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

总结

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

你可能感兴趣的:(Maven,maven,聚合,继承,多模块,子模块)