<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(591) 評論(0)  編輯  收藏 所屬分類: 持續集成maven

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: AAAAA级少妇高潮大片免费看| 久久国产乱子伦免费精品| 免费精品国产自产拍在线观看| 一个人免费观看日本www视频 | 免费av欧美国产在钱| 免费一级毛片不卡不收费| 亚洲狠狠婷婷综合久久久久 | 亚洲大尺码专区影院| 久久亚洲中文字幕无码| a级精品九九九大片免费看| a毛片基地免费全部视频| 亚洲中文字幕久久精品无码APP| 亚洲大尺码专区影院| 色窝窝免费一区二区三区| 亚洲综合精品成人| 国产精品免费看久久久| 免费午夜爽爽爽WWW视频十八禁 | 久久亚洲综合色一区二区三区| 一本色道久久88—综合亚洲精品 | www成人免费观看网站| 亚洲精品一品区二品区三品区| 国产白丝无码免费视频| 亚洲人成7777影视在线观看| a级毛片在线免费看| 666精品国产精品亚洲 | 一级毛片在线免费看| 亚洲桃色AV无码| 二级毛片免费观看全程| 国产国产人免费人成免费视频| 亚洲码一区二区三区| 96免费精品视频在线观看| 亚洲熟女综合一区二区三区| 亚洲国产成人久久一区WWW| 国产成人亚洲综合在线| 夫妻免费无码V看片| 久久久婷婷五月亚洲97号色| 国产乱妇高清无乱码免费| 亚洲视频欧洲视频| 国产最新凸凹视频免费| 免费国产在线视频| 亚洲综合一区二区国产精品|