###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最核心的設計理念之一。繼承