qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          Maven - 繼承和聚合

          *聚合(多模塊)

                       在一個(gè)項(xiàng)目中 往往有多個(gè)模塊組成  例如有項(xiàng)目demo  下面有a, b兩個(gè)模塊

                       為了能使用一條命令就能構(gòu)建demo-a, demo-b兩個(gè)模塊, 需要?jiǎng)?chuàng)建一個(gè)額外的聚合模塊, 然后通過(guò)該模塊構(gòu)建整個(gè)項(xiàng)目的所有模塊。

                        聚合模塊(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節(jié)點(diǎn)有多個(gè)module,每個(gè)module的值都是一個(gè)被聚合模塊的相對(duì)目錄。

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

                a.父子關(guān)系:

                

                   父子關(guān)系  聚合模塊的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上面 運(yùn)行mvn命令 根據(jù)聚合順序依次構(gòu)建多個(gè)模塊。

          *繼承

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

                聚合模塊(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下的子節(jié)點(diǎn)groupId,artifactId,version指定父模塊的坐標(biāo),這三個(gè)元素是必須的。

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

          可以被繼承的POM元素

          groupId:項(xiàng)目id,項(xiàng)目坐標(biāo)的核心元素

          version:項(xiàng)目版本,項(xiàng)目坐標(biāo)的核心元素

          description:項(xiàng)目描述信息

          organization:項(xiàng)目組織信息

          inceptionYear:項(xiàng)目創(chuàng)世年月

          developers:項(xiàng)目開(kāi)發(fā)者信息

          contributors:項(xiàng)目貢獻(xiàn)者信息

          distributionManagement:項(xiàng)目部署配置

          scm:項(xiàng)目的版本控制信息

          mailingLists:項(xiàng)目郵件列表信息

          properties:自定義的屬性

          dependencies:項(xiàng)目的依賴配置

          dependencyManagement:項(xiàng)目的依賴管理配置

          repositories:項(xiàng)目的倉(cāng)庫(kù)配置

          build:項(xiàng)目源碼目錄配置。輸出目錄配置,插件配置等。

          *依賴管理

                       父模塊(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中聲明  不然不會(huì)產(chǎn)生效果 -->  
          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中的依賴  這樣才會(huì)真正被使用 -->  
          21.         <dependency>  
          22.           <groupId>junit</groupId>  
          23.           <artifactId>junit</artifactId>  
          24.         </dependency>  
          25.           
          26.         <!-- 擴(kuò)展依賴  父pom中并沒(méi)有聲明 不會(huì)影響到父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.   <!-- 沒(méi)有聲明父pom中的依賴  不會(huì)被使用 -->  
          15.     
          16.   <build>  
          17.     <finalName>demo-b</finalName>  
          18.   </build>  
          19. </project>  

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

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

          模塊b(demo-b) pom中沒(méi)有聲明父pom中junit依賴 不會(huì)產(chǎn)生實(shí)際效果。

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 平武县| 芜湖县| 广平县| 清水县| 石泉县| 乌拉特中旗| 邢台市| 太仆寺旗| 五常市| 连城县| 兴文县| 海丰县| 灵川县| 华池县| 盖州市| 儋州市| 临洮县| 泸溪县| 呼玛县| 石景山区| 科技| 博客| 嘉黎县| 项城市| 泗阳县| 新竹市| 黄冈市| 延长县| 龙海市| 达州市| 达拉特旗| 田阳县| 海晏县| 仙游县| 贵德县| 乌鲁木齐市| 成武县| 深圳市| 竹溪县| 孝昌县| 温州市|