Maven-继承与聚合

Maven-继承

Maven继承是指在Maven项目中,让一个项目继承另一个项目的配置信息(pom.xml),是一种依赖管理的简化手段

在同一个项目中,可以有不同的多个模块来组成

模块之间会使用相同的框架,部分相同的依赖

我们可以选择在父工程中直接引入依赖,让子模块继承


父工程

我们建立一个模块,作为所有模块的父工程

在父工程中我们不写代码,不做具体的功能实现,所以将打包方式改为pom,并删除src文件夹

在idea中,父工程模块下建立一个新的模块,建立时设置好父项即可

<parent>
    <groupId>com.xiaobai</groupId>
    <artifactId>maven-pom-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

我们发现子工程模块的pom配置文件中多了一个parent标签

这个标签使用gav的方式标记了具体的父工程模块,同时继承了父工程的g和v属性


dependencyManagement

当我们在父工程模块中使用dependencies标签导入的依赖,会直接被所有子工程导入依赖

为了解决这个问题,我们在父工程中使用dependencyManagement标签

这个标签下的dependencies不会直接导入依赖,也不会让子工程导入依赖

他的作用只是声明了如果使用该依赖时,需要用到的版本号

当子工程导入依赖时,只需要依赖的ga属性,不需要再写v属性,这样就可以保证项目中所有模块的依赖版本统一


总结

当项目使用父工程 -> 子工程的管理方式之后,我们就可以制作出类似于node.js&npm的全局依赖和项目依赖的管理方式

在父工程中使用dependencies导入的依赖,就相当于全局依赖

使用dependencyManagement声明的依赖,则提前约定好此依赖被导入时的版本号

当具体的模块导入该依赖时,不需要使用version标签,解决了各个模块中导入依赖版本不统一的问题


Maven-聚合

在父工程的配置文件中,存在modules标签

这个标签的作用就是聚合所有继承于该工程的子工程,是构建管理的简化手段

在module标签中的是子工程的artifactId

<modules>
    <module>shop-order</module>
    <module>shop-user</module>
</modules>

当子工程被聚合后,父工程执行构建的生命周期时会自动按照依赖关系的正确顺序依次执行子工程的构建生命周期

这样就实现了,子工程模块的统一构建