1. 程式人生 > >Maven中聚合與繼承

Maven中聚合與繼承

一、聚合

如果我們想一次構建多個專案模組,那我們就需要對多個專案模組進行聚合

1.1、聚合配置程式碼

 <modules>
       <module>模組一</module>
       <module>模組二</module>
       <module>模組三</module>
 </modules>

例如:對專案的Hello、HelloFriend、MakeFriends這三個模組進行聚合

 <modules>
       <module>../Hello</module>  
       <module>../HelloFriend</module>        
       <module>../MakeFriends</module>
 </modules>

其中module的路徑為相對路徑。

二、繼承

繼承為了消除重複,我們把很多相同的配置提取出來,例如:grouptId,version等

2.1、繼承配置程式碼

<parent>  
          <groupId>me.gacl.maven</groupId>
          <artifactId>ParentProject</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <relativePath>../ParentProject/pom.xml</relativePath>  
 </parent>

2.2、繼承程式碼中定義屬性

繼承程式碼過程中,可以定義屬性,例如:

<properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <junit.version>4.9</junit.version>
     <maven.version>0.0.1-SNAPSHOT</maven.version>
 </properties>

訪問屬性的方式為${junit.version},例如:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>

2.3、父模組用dependencyManagement進行管理

<dependencyManagement>
    <dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>    
    <dependency>
            <groupId>cn.itcast.maven</groupId>
            <artifactId>HelloFriend</artifactId>
            <version>${maven.version}</version>
            <type>jar</type>
            <scope>compile</scope>
       </dependency>
     </dependencies>
</dependencyManagement>

這樣的好處是子模組可以有選擇行的繼承,而不需要全部繼承。

三、聚合與繼承的關係

聚合主要為了快速構建專案,繼承主要為了消除重複

四、聚合與繼承實戰演練

建立四個Maven專案,如下圖所示:
  在這裡插入圖片描述

這四個專案放在同一個目錄下,方便後面進行聚合和繼承
在這裡插入圖片描述

Parent專案是其它三個專案的父專案,主要是用來配置一些公共的配置,其它三個專案再通過繼承的方式擁有Parent專案中的配置,首先配置Parent專案的pom.xml,新增對專案的Hello、HelloFriend、MakeFriends這三個模組進行聚合以及jar包依賴,pom.xml的配置資訊如下:

Parent專案的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>me.gacl.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>Parent</name>
    <url>http://maven.apache.org</url>
    
    <!-- 對專案的Hello、HelloFriend、MakeFriends這三個模組進行聚合 -->
    <modules>
        <module>../Hello</module>
        <module>../HelloFriend</module>
        <module>../MakeFriends</module>
    </modules>
    
    <!-- 定義屬性 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.9</junit.version>
        <maven.version>0.0.1-SNAPSHOT</maven.version>
    </properties>

    <!-- 用dependencyManagement進行jar包依賴管理 -->
    <dependencyManagement>
        <!-- 配置jar包依賴 -->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <!-- 訪問junit.version屬性 -->
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>me.gacl.maven</groupId>
                <artifactId>Hello</artifactId>
                <!-- 訪問maven.version屬性 -->
                <version>${maven.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>me.gacl.maven</groupId>
                <artifactId>HelloFriend</artifactId>
                <!-- 訪問maven.version屬性 -->
                <version>${maven.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

在Hello專案的pom.xml中繼承Parent專案的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  
  <modelVersion>4.0.0</modelVersion>
  <artifactId>Hello</artifactId>
  
      <!-- 繼承Parent專案中的pom.xml配置 -->
       <parent>  
          <groupId>me.gacl.maven</groupId>
         <artifactId>Parent</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <!-- 使用相對路徑 -->
        <relativePath>../Parent/pom.xml</relativePath>  
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

在HelloFriend專案的pom.xml中繼承Parent專案的pom.xml配置


4.0.0
HelloFriend
HelloFriend

<!-- 繼承Parent專案中的pom.xml配置 -->
<parent>
    <groupId>me.gacl.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies>
    <dependency>
        <!-- Parent專案的pom.xml檔案配置中已經指明瞭要使用的Junit的版本號,因此在這裡新增junit的依賴時,
        可以不指明<version></version>和<scope>test</scope>,會直接從Parent專案的pom.xml繼承 -->
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <!-- HelloFriend專案中使用到了Hello專案中的類,因此需要新增對Hello.jar的依賴 
    Hello.jar的<version>和<scope>也已經在Parent專案的pom.xml檔案配置中已經指明瞭
    因此這裡也可以省略不寫了
    -->
    <dependency>
        <groupId>me.gacl.maven</groupId>
        <artifactId>Hello</artifactId>
    </dependency>
</dependencies>

在MakeFriends專案的pom.xml中繼承Parent專案的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>MakeFriends</artifactId>
    <!-- 繼承Parent專案中的pom.xml配置 -->
    <parent>
        <groupId>me.gacl.maven</groupId>
        <artifactId>Parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../Parent/pom.xml</relativePath>
    </parent>
    <dependencies>
        <dependency>
        <!-- Parent專案的pom.xml檔案配置中已經指明瞭要使用的Junit的版本號,因此在這裡新增junit的依賴時,
            可以不指明<version></version>和<scope>test</scope>,會直接從Parent專案的pom.xml繼承 -->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
        <!-- MakeFriends專案中使用到了HelloFriend專案中的類,因此需要新增對HelloFriend.jar的依賴 
        HelloFriend.jar的<version>和<scope>也已經在Parent專案的pom.xml檔案配置中已經指明瞭
        因此這裡也可以省略不寫了
        -->
            <groupId>me.gacl.maven</groupId>
            <artifactId>HelloFriend</artifactId>
        </dependency>
    </dependencies>
</project>

以上的四個專案的pom.xml經過這樣的配置之後,就完成了在Parent專案中聚合Hello、HelloFriend、MakeFriends這三個子專案(子模組),而Hello、HelloFriend、MakeFriends這三個子專案(子模組)也繼承了Parent專案中的公共配置,這樣就可以使用Maven一次性構建所有的專案了,如下圖所示:

相關推薦

Maven聚合繼承

一、聚合 如果我們想一次構建多個專案模組,那我們就需要對多個專案模組進行聚合 1.1、聚合配置程式碼 <modules> <module>模組一</module> <module>模組二</mod

maven專案聚合繼承、依賴管理、佔位符、構建管理、多套配置

本文引用部落格地址:https://my.oschina.net/mzdbxqh/blog/846018 本文開始對study-parent模組的pom.xml進行配置。該檔案的角色是整個Maven的Parent。文中將對Maven的聚合與繼承、依賴管理、佔位符、構建管理、多套配置等概念進行解釋。

maven聚合繼承

img bubuko 開發 系統 http png 概念 mave mage 花了兩天,系統的看完了《maven實戰》, 盡管書是10年出的,但裏面的概念,現在也不過時。 很多以前朦朧的東西,現在都清晰了。 重要的知識點,還是在多模塊開發中。 maven的聚合與

Maven聚合繼承

1.聚合   <project> <modelVersion>4.0.0</modelVersion> <groupId></groupId> <artifactId></artifactId&g

Maven聚合繼承

1、聚合   一個帶有模組的專案稱為“多模組”或“聚合器”專案。模組是POM列出的專案,並作為一個組執行。一個pom打包的專案可以通過將它們作為模組來聚合一組專案的構建,這些模組是這些專案的目錄或pom檔案的相對路徑。 <project xmlns

第七節:Maven聚合繼承

     Maven的聚合特性能夠把專案的各個模組聚合在一起構建,而Maven的繼承特性則能幫助抽取各模組間相同的依賴和外掛配置,還能促進各個模組之間配置的一致性。 聚合:      我們在開發過程中,將專案拆分成獨立的子模組,每個模組都是一個獨立的maven proje

Maven深入學習(三)- 聚合繼承

1.聚合 在使用Maven的過程中,手邊可能有很多個專案,都需要打包,或者同時進行一些操作,這時候,如果一個一個手動的去操作, 就會顯得很麻煩。這時候,使用聚合就可以解決問題了。 假設,現在已有專案brother01,brother02,我們想要同時將這兩個專

Maven 聚合繼承

一. 聚合   隨著技術的飛速發展和各類使用者對軟體的要求越來越高,軟體本身也變得越來越複雜,然後軟體設計人員開始採用各種方式進行開發,於是就有了我們的分層架構、分模組開發,來提高程式碼的清晰和重用。針對於這一特性,maven也給予了相應的配置。   我們在開發過程中,建立了2個以上的模組,每個模組都是一個獨

設計模式—靜態代理模式(聚合繼承方式比較)

rri 技術分享 ktr sta too div ide rup 增加 一、概述 1.目標:要在Tank的move()方法做時間代理及日誌代理(可以設想以後還要增加很多代理處理),且代理間的順序可活更換 2.思路: (1)聚合:代理類聚合了被代理類,且代理類及被代理類都實現

Maven聚合繼承

maven中的聚合和繼承是2個不同的概念,雖然經常在一個父模組裡同時完成這2個功能 。 聚合的作用是把子專案的構建過程串到一起。一個專案往往由多個模組構成的,在進行構建時,針對每個模組都進行構建命令是一件非常繁瑣又容易出錯的事情,所以Maven的聚合功能能夠替我們完成進行一

Maven學習總結(七):Maven聚合繼承

一、聚合   如果我們想一次構建多個專案模組,那我們就需要對多個專案模組進行聚合 1.1、聚合配置程式碼 1 <modules> 2 <module>模組一</module> 3 <module>模組二</module

Eclipse使用(十二)—— 建立Maven多模組(父子)專案演示Maven聚合繼承以及模組之間的依賴關係

在子模組中宣告該模組所屬的父專案,如下: <packaging>jar</packaging><!-- 打包方式jar包或者war包,如果不宣告預設為jar包,當然也可以為pom,這意味著此模組下面還有子模組 --> <parent> <grou

Maven學習筆記之maven聚合繼承問題

聚合: 將多個模組聚合到一個模組裡面,然後同時進行編譯,執行。如下:   將user-core和user-log、user-service聚合到user模組中。 只需要在user的pom.xml中進行如下操作   執行情況將按照先後順序依次執行。   繼承: 將p

重新學習java(四) ---- 組合、聚合繼承的愛恨情仇

有人學了繼承,認為他是面向物件特點之一,就在所有能用到繼承的地方使用繼承,而不考慮究竟該不該使用,無疑,這是錯誤的。那麼,究竟該如何使用繼承呢?java中類與類之間的關係大部分的初學者只知道java中兩個類之間可以是繼承與被繼承的關係,可是事實上,類之間的關係大體上存在五

maven】---聚合繼承

前言     自從我知道寫maven實戰這本書的作者長得隨心所欲後,我再拿起這本書真心的不想看前言了。下面分享一下maven中的所謂的聚合和繼承。 內容 下文中的子本指的是:多個maven專案。 父本

maven聚合繼承

maven聚合工程時為了方便管理,可能一個工程有多個子模組,這時可以建立聚合工程管理. maven繼承是為了方便jar包管理,比如:可能A B C三個工程都需要junit jar包,在每個工程新增jar包依賴會顯得重複,這時只需要建立一個工程讓A B C繼承,在父工程中新增

Maven聚合模塊繼承Maven的生命周期

iss lips 平時 watermark 配置文件 高度 執行 clip 計數 端碗吹水 Maven聚合模塊: 因為Maven是提倡模塊化編程的,所以會以多個工程分為多個模塊。如果所有的功能、模塊都寫在一個工程裏的話,不方便於擴展、升級、修改、查看和團隊開發,而且也不方便

Maven繼承依賴傳遞

1、Maven中的繼承   在Maven中,子專案是可以繼承父專案中的依賴的,比如說我們有一個父專案maven-parent,該父專案擁有一個子專案A,如果在父專案中依賴了junit,那麼在子專案A中即便是沒有引入junit,在子專案中仍然能夠使用junit,

MongoDB聚合工具Aggregate等的介紹使用

mon new 測試數據 first 排序 表示 大數據 init god Aggregate是MongoDB提供的眾多工具中的比較重要的一個,類似於SQL語句中的GROUP BY。聚合工具可以讓開發人員直接使用MongoDB原生的命令操作數據庫中的數據,並且按照要求進行聚

論python3下“多態”繼承

ict for all order section 有意思 back ani eve 1、背景: 近日切換到python3後,發現python3在多態處理上,有一些比較有意思的情況,特別記載,供大家參考。。。 以廖老師的python3教程中的animal 和dog的繼承