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

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模块之前的模块不会被构建)

你可能感兴趣的:(maven,继承,聚合,Reactor)