欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《maven实战》读书笔记(四)——聚合与继承

程序员文章站 2022-05-04 21:22:15
...
1、聚合的写法
<project>
    <groupId />
    <artifactId />
    <version />
    <packaging>pom</packaging>
    <modules>
        <module>abc</module>
        <module>def</module>
    </modules>
</project>

以上的配置和一般的POM有2个区别,一个是packaging要声明为pom,第二个是多了<modules>的配置

这里的abc和def都是子目录的目录名。也就是说,abc和def都是这个聚合项目的子目录,如果要平级的话,这里需要改成../abc和../def

2、继承

以下列表中的pom元素是可以被继承的:

<groupId>
<version>
<description>
<distributionManagement>
<properties>
<dependencies>
<dependencyManagement>
<repositories>
<build>

不过一般不会直接继承<dependencies>,因为未来增加的子项目,是否一定就需要依赖parent里声明的依赖,是很难说的。所以一般在parent pom里,只会配置<dependencyManagement>,以限定依赖的版本号。实际的依赖还是在具体子项目里声明的,但是对版本号进行了控制

3、聚合与继承的关系

聚合主要是为了多个maven工程协同构建项目,而继承主要是为了消除重复配置

对于聚合模块来说,它知道有哪些被聚合的模块,被聚合的模块并不知道聚合模块的存在

对于继承关系的parent pom来说,它并不知道哪些子模块继承自它,而子模块则必须知道父模块是什么

在实际项目中,往往会把聚合POM和父POM合一,这样也是有道理的,主要是为了方便起见。至于目录结构,可以是子目录,也可以是平行关系

4、裁剪Reactor

当构建一组存在聚合和继承关系的maven项目时,就存在一个Reactor的关系,也就是构建的顺序

默认情况下,构建顺序会形成一个有向非循环图

但是可以通过一些参数,来对构建顺序进行裁剪

mvn -pl aa,bb
仅构建aa和bb模块

mvn -pl aa -am
构建aa,及aa的依赖模块

mvn -pl aa -amd
构建aa,及依赖aa的模块

mvn -pl aa -amd bb
首先根据aa,及依赖aa的模块,计算出构建顺序之后,从bb模块开始构建(bb模块之前的模块不会被构建)