maven聚合和繼承

Maven聚合與繼承

1、聚合
爲了可以使用一條命令就能構建 account-email和 account-persist兩個模塊,咱們須要創建一個額外的名爲 account-aggregator的模塊,而後經過該模塊構建整個項目的全部模塊。 account-aggregator自己也是個 Maven項目,它的 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>  
         </modules>  
    </project>  

 注意:packaging的類型爲pom ,module的值是一個以當前POM爲主目錄的相對路徑。

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>  

 子模塊聲明繼承以下:


    <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以下:

    <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>  

 注意:

一、子模塊沒有聲明groupId和version, 這兩個屬性繼承至父模塊。但若是子模塊有不一樣與父模塊的 groupId、version ,也可指定;

二、不該該繼承artifactId,若是groupId ,version,artifactId 徹底繼承的話會形成座標衝突;另外即便使用不一樣的 groupId或version,一樣的 artifactId也容易產生混淆。
三、使用繼承後 parent也必須像自模塊同樣加入到聚合模塊中。也就是在在聚合模塊的 pom中加入<module>account-parent</module>

 

3、聚合與繼承的關係
區別 :
1.對於聚合模塊來講,它知道有哪些被聚合的模塊,但那些被聚合的模塊不知道這個聚合模塊的存在。
2.對於繼承關係的父 POM來講,它不知道有哪些子模塊繼承與它,但那些子模塊都必須知道本身的父 POM是什麼。

共同點 :
1.聚合 POM與繼承關係中的父POM的 packaging都是pom
2.聚合模塊與繼承關係中的父模塊除了 POM以外都沒有實際的內容。
Maven聚合關係與繼承關係的比較
注:在現有的實際項目中一個 POM既是聚合POM,又是父 POM,這麼作主要是爲了方便

4、Maven可繼承的POM 元素


    groupId :項目組 ID ,項目座標的核心元素;  
    version :項目版本,項目座標的核心元素;  
    description :項目的描述信息;  
    organization :項目的組織信息;  
    inceptionYear :項目的創始年份;  
    url :項目的 url 地址  
    develoers :項目的開發者信息;  
    contributors :項目的貢獻者信息;  
    distributionManagerment :項目的部署信息;  
    issueManagement :缺陷跟蹤系統信息;  
    ciManagement :項目的持續繼承信息;  
    scm :項目的版本控制信息;  
    mailingListserv :項目的郵件列表信息;  
    properties :自定義的 Maven 屬性;  
    dependencies :項目的依賴配置;  
    dependencyManagement :醒目的依賴管理配置;  
    repositories :項目的倉庫配置;  
    build :包括項目的源碼目錄配置、輸出目錄配置、插件配置、插件管理配置等;  
    reporting :包括項目的報告輸出目錄配置、報告插件配置等ui

相關文章
相關標籤/搜索