###8.1 聚合### Maven聚合:当咱们的模块很是多的时候,咱们想要一次构建多个项目,而不是到多个模块的目录下分别执行命令。Maven的聚合特性就是为该需求服务的。
为了可以使用一条命令就能构建 account-email和 account-persist两个模块,咱们须要创建一个额外的名为 account-aggregator的模块,而后经过该模块构建整个项目的全部模块。 account-aggregator自己也是个 Maven项目,它的 POM以下工具
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-aggregator</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging> pom </packaging> <name>Account Aggregator</name> <modules> <module>account-email</module> <module>account-persist</module> </modules> </project>
注意:packaging的类型为pom ,module的值是一个以当前POM为主目录的相对路径。 聚合模块与其余模块的目录结构并不是必定是父子关系。
Maven约定:操作系统
###8.2 继承### 可声明父POM供子 POM继承 父模块POM以下:设计
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId> account-parent </artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Account Parent</name> </project>
子模块声明继承以下:code
<project> <modelVersion>4.0.0</modelVersion> < parent > <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId> account-parent </artifactId> <version>1.0.0-SNAPSHOT</version> < relativePath >../account-parent/pom.xml</ relativePath> </ parent > <artifactId> account-email </artifactId> <name>Account Email</name> ... </project>
最后,一样还须要把 account-parent加入到聚合模块account-aggregator中。 聚合的 POM以下:xml
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-aggregator</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging> pom </packaging> <name>Account Aggregator</name> <modules> <module>account-email</module> <module>account-persist</module> <module> account-parent</module> </modules> </project>
对于聚合模块来讲,它知道有哪些被聚合的模块,而对于被聚合的模块来讲,它们不知道被谁聚合了,也不知道它的存在;对于继承关系的pom来讲,它不知道被哪些模块继承了,对于子pom来讲,它必须知道要继承谁。
总之,聚合是为了方便快速构建项目,继承是为了消除重复配置,在简化pom的同时还能促进各个模块配置的一致性。共同点是二者的packaging都是pom,聚合模块与继承关系中的父模块除了pom以外都没有实际内容。
实际项目中咱们会发现,一个pom既是聚合pom,也是父pom,这么作主要是为了方便。
Java成功的重要缘由之一就是他可以屏蔽大部分操做系统的差别,XML流行的缘由之一是全部语言都接受他。Maven用的人愈来愈可能是Maven提倡约定优于配置,这是Maven最核心的设计理念之一。继承