《maven实战》读书笔记(四)——聚合与继承
程序员文章站
2022-05-04 21:22:15
...
1、聚合的写法
以上的配置和一般的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模块之前的模块不会被构建)
<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模块之前的模块不会被构建)