qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Maven - 繼承和聚合

          *聚合(多模塊)

                       在一個項目中 往往有多個模塊組成  例如有項目demo  下面有a, b兩個模塊

                       為了能使用一條命令就能構建demo-a, demo-b兩個模塊, 需要創建一個額外的聚合模塊, 然后通過該模塊構建整個項目的所有模塊。

                        聚合模塊(demo-parent) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <groupId>com.x.demo</groupId>  
          5.   <artifactId>demo-parent</artifactId>  
          6.   <packaging>pom</packaging>  
          7.   <version>0.0.1-SNAPSHOT</version>  
          8.   <name>demo-parent Maven Webapp</name>  
          9.   <url>http://maven.apache.org</url>  
          10.     
          11.   <modules>  
          12.     <module>../demo-a</module>  
          13.     <module>../demo-b</module>  
          14.   </modules>  
          15. </project>  

                       模塊a(demo-a) pom:

          1. <project xmlns="<a href="http://maven.apache.org/POM/4.0.0">http://maven.apache.org/POM/4.0.0</a>xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"  
          2.   xsi:schemaLocation="<a href="http://maven.apache.org/POM/4.0.0">http://maven.apache.org/POM/4.0.0</a> <a href="http://maven.apache.org/maven-v4_0_0.xsd">http://maven.apache.org/maven-v4_0_0.xsd</a>">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <groupId>com.x.demo</groupId>  
          5.   <artifactId>demo-a</artifactId>  
          6.   <packaging>jar</packaging>  
          7.   <version>0.0.1-SNAPSHOT</version>  
          8.   <name>demo-a Maven Webapp</name>  
          9.   <url>http://maven.apache.org</url>  
          10.     
          11.   <dependencies>  
          12.     <dependency>  
          13.       <groupId>junit</groupId>  
          14.       <artifactId>junit</artifactId>  
          15.       <version>3.8.1</version>  
          16.       <scope>test</scope>  
          17.     </dependency>  
          18.   </dependencies>  
          19.     
          20.   <build>  
          21.     <finalName>demo-a</finalName>  
          22.   </build>  
          23. </project>  

                       模塊b(demo-b) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <groupId>com.x.demo</groupId>  
          5.   <artifactId>demo-b</artifactId>  
          6.   <packaging>jar</packaging>  
          7.   <version>0.0.1-SNAPSHOT</version>  
          8.   <name>demo-b Maven Webapp</name>  
          9.   <url>http://maven.apache.org</url>  
          10.     
          11.   <dependencies>  
          12.     <dependency>  
          13.       <groupId>junit</groupId>  
          14.       <artifactId>junit</artifactId>  
          15.       <version>3.8.1</version>  
          16.       <scope>test</scope>  
          17.     </dependency>  
          18.   </dependencies>  
          19.     
          20.   <build>  
          21.     <finalName>demo-b</finalName>  
          22.   </build>  
          23. </project>  

                額外模塊(demo-parent) pom中的modules節點有多個module,每個module的值都是一個被聚合模塊的相對目錄。

               關于聚合模塊目錄與其他模塊的目錄主要有兩種形式:

                a.父子關系:

                

                   父子關系  聚合模塊的pom:

          1. <modules>  
          2.     <module>demo-a</module>  
          3.     <module>demo-b</module>  
          4. </modules>  

                a.平行目錄:

               

                   平行目錄  聚合模塊的pom:

          1. <modules>  
          2.     <module>../demo-a</module>  
          3.     <module>../demo-b</module>  
          4. </modules>  

              最后在聚合模塊(demo-parent)的pom上面 運行mvn命令 根據聚合順序依次構建多個模塊。

          *繼承

                 上面的例子中, a,b兩個模塊都依賴junit, 為了消除重復,可以使用pom的繼承,以達到一處聲明,多處使用的目的。

                聚合模塊(demo-parent) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <groupId>com.x.demo</groupId>  
          5.   <artifactId>demo-parent</artifactId>  
          6.   <packaging>pom</packaging>  
          7.   <version>0.0.1-SNAPSHOT</version>  
          8.   <name>demo-parent Maven Webapp</name>  
          9.   <url>http://maven.apache.org</url>  
          10.     
          11.    <dependencies>  
          12.     <dependency>  
          13.       <groupId>junit</groupId>  
          14.       <artifactId>junit</artifactId>  
          15.       <version>3.8.1</version>  
          16.       <scope>test</scope>  
          17.     </dependency>  
          18.   </dependencies>  
          19.    <modules>  
          20.     <module>../demo-a</module>  
          21.     <module>../demo-b</module>  
          22.   </modules>  
          23. </project>  

                       模塊a(demo-a) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.     
          5.   <parent>  
          6.     <groupId>com.x.demo</groupId>  
          7.     <artifactId>demo-parent</artifactId>  
          8.     <version>0.0.1-SNAPSHOT</version>  
          9.     <relativePath>../demo-parent/pom.xml</relativePath>  
          10.   </parent>  
          11.     
          12.   <artifactId>demo-a</artifactId>  
          13.   <name>demo-a Maven Webapp</name>  
          14.     
          15.   <build>  
          16.     <finalName>demo-a</finalName>  
          17.   </build>  
          18. </project>  

                       模塊b(demo-b) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <parent>  
          5.     <groupId>com.x.demo</groupId>  
          6.     <artifactId>demo-parent</artifactId>  
          7.     <version>0.0.1-SNAPSHOT</version>  
          8.     <relativePath>../demo-parent/pom.xml</relativePath>  
          9.   </parent>  
          10.     
          11.   <artifactId>demo-b</artifactId>  
          12.   <name>demo-a Maven Webapp</name>  
          13.     
          14.   <build>  
          15.     <finalName>demo-b</finalName>  
          16.   </build>  
          17. </project>  

             parent元素聲明父模塊,parent下的子節點groupId,artifactId,version指定父模塊的坐標,這三個元素是必須的。

             節點relativePath指定父模塊pom的路徑,默認值是:../pom.xml,也就是說父pom在上一層目錄,(<relativePath>../demo-parent/pom.xml</relativePath> 表示父模塊pom和子模塊是平行目錄)

          可以被繼承的POM元素

          groupId:項目id,項目坐標的核心元素

          version:項目版本,項目坐標的核心元素

          description:項目描述信息

          organization:項目組織信息

          inceptionYear:項目創世年月

          developers:項目開發者信息

          contributors:項目貢獻者信息

          distributionManagement:項目部署配置

          scm:項目的版本控制信息

          mailingLists:項目郵件列表信息

          properties:自定義的屬性

          dependencies:項目的依賴配置

          dependencyManagement:項目的依賴管理配置

          repositories:項目的倉庫配置

          build:項目源碼目錄配置。輸出目錄配置,插件配置等。

          *依賴管理

                       父模塊(demo-parent) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <groupId>com.x.demo</groupId>  
          5.   <artifactId>demo-parent</artifactId>  
          6.   <packaging>pom</packaging>  
          7.   <version>0.0.1-SNAPSHOT</version>  
          8.   <name>demo-parent Maven Webapp</name>  
          9.   <url>http://maven.apache.org</url>  
          10.   
          11.     <!-- dependencyManagement 定義的依賴  需要在子pom中聲明  不然不會產生效果 -->  
          12.     <dependencyManagement>    
          13.       <dependencies>  
          14.         <dependency>  
          15.           <groupId>junit</groupId>  
          16.           <artifactId>junit</artifactId>  
          17.           <version>3.8.1</version>  
          18.           <scope>test</scope>  
          19.         </dependency>  
          20.     </dependencies>  
          21.  </dependencyManagement>  
          22.     
          23.   <modules>  
          24.     <module>../demo-a</module>  
          25.     <module>../demo-b</module>  
          26.   </modules>  
          27. </project>  

                       模塊a(demo-a) pom:

          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.     
          5.   <parent>  
          6.     <groupId>com.x.demo</groupId>  
          7.     <artifactId>demo-parent</artifactId>  
          8.     <version>0.0.1-SNAPSHOT</version>  
          9.     <relativePath>../demo-parent/pom.xml</relativePath>  
          10.   </parent>  
          11.     
          12.   <artifactId>demo-a</artifactId>  
          13.   <name>demo-a Maven Webapp</name>  
          14.   
          15.   <properties>  
          16.     <mail.version>1.4.1</mail.version>  
          17.   </properties>  
          18.     
          19.    <dependencies>  
          20.         <!-- 聲明父pom中的依賴  這樣才會真正被使用 -->  
          21.         <dependency>  
          22.           <groupId>junit</groupId>  
          23.           <artifactId>junit</artifactId>  
          24.         </dependency>  
          25.           
          26.         <!-- 擴展依賴  父pom中并沒有聲明 不會影響到父POM 和其他模塊 -->  
          27.         <dependency>  
          28.             <groupId>javax.mail</groupId>  
          29.             <artifactId>mail</artifactId>  
          30.             <version>${mail.version}</version>  
          31.         </dependency>  
          32.     </dependencies>  
          33.       
          34.   <build>  
          35.     <finalName>demo-a</finalName>  
          36.   </build>  
          37. </project>  
                       模塊b(demo-b) pom:
          1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          3.   <modelVersion>4.0.0</modelVersion>  
          4.   <parent>  
          5.     <groupId>com.x.demo</groupId>  
          6.     <artifactId>demo-parent</artifactId>  
          7.     <version>0.0.1-SNAPSHOT</version>  
          8.     <relativePath>../demo-parent/pom.xml</relativePath>  
          9.   </parent>  
          10.     
          11.   <artifactId>demo-b</artifactId>  
          12.   <name>demo-a Maven Webapp</name>  
          13.     
          14.   <!-- 沒有聲明父pom中的依賴  不會被使用 -->  
          15.     
          16.   <build>  
          17.     <finalName>demo-b</finalName>  
          18.   </build>  
          19. </project>  

          父POM 中使用dependencyManagement 聲明的依賴不會給子模塊引入依賴, 只會繼承這段配置。

          在模塊a(demo-a) pom中聲明了父pom中junit依賴 在執行的時候才會獲得真正的依賴信息。

          模塊b(demo-b) pom中沒有聲明父pom中junit依賴 不會產生實際效果。

          posted on 2014-04-01 15:20 順其自然EVO 閱讀(594) 評論(0)  編輯  收藏 所屬分類: 持續集成maven

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玉屏| 仪征市| 吉林市| 湛江市| 商水县| 如东县| 鄯善县| 顺昌县| 白河县| 永德县| 东海县| 柘荣县| 休宁县| 扶沟县| 眉山市| 保山市| 平邑县| 宣恩县| 龙江县| 土默特左旗| 涪陵区| 山东省| 锦州市| 格尔木市| 丰宁| 靖安县| 特克斯县| 延川县| 玉环县| 辽阳县| 深圳市| 育儿| 治县。| 治多县| 延吉市| 泸溪县| 澄江县| 岐山县| 壶关县| 农安县| 右玉县|