Maven學習小結(四 聚合與繼承)

1.聚合 apache

一次構建多個項目模塊。 maven

2.繼承 ui

爲了消除重複,把不少相同的配置提取出來,例如groupid和version; url

image

2.1 Maven中能夠繼承的POM元素spa

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

3.示例 插件

3.1建立4個Maven項目,放在相同的目錄下,其中hello_parent爲父項目(聚合模塊),hello_1/hello_2/hello_3爲子項目(被聚合的模塊);hello_parent的POM既是聚合POM,又是父POM這麼作主要是爲了方便。 版本控制

image

3.1.1 hello_parent項目POMcode

<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">
  <!-- 當前pom的版本號 -->
  <modelVersion>4.0.0</modelVersion>
  <!-- groupId: 當前jar所屬的命名空間 -->
  <groupId>cn.test.maven</groupId>
  <!-- 當前項目模塊名稱 -->
  <artifactId>parent</artifactId>
  <!-- 當前項目的版本, SNAPSHOT鏡像版 -->
  <version>0.0.1-SNAPSHOT</version>
  <!-- 聚合、父繼承的packaging必須是pom -->
  <packaging>pom</packaging>

  <!-- name提供一個相對容易讀的名字,合理配name字段,會讓Mavne的構建輸出更清晰 -->
  <name>Parent</name>
  <url>http://maven.apache.org</url>

 <!-- 定義要聚合的模塊 -->
  <modules>
      <!-- 每一個module的值都是當前pom的相對路徑 -->
      <module>../hello_ch1</module>
      <module>../hello_ch2</module>
      <module>../hello_ch3</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>cn.test.maven</groupId>
                <artifactId>hello_ch1</artifactId>
                <!-- 訪問maven.version屬性 -->
                <version>${maven.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>cn.test.maven</groupId>
                <artifactId>hello_ch2</artifactId>
                <!-- 訪問maven.version屬性 -->
                <version>${maven.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
/*

繼承的優勢:在父pom中定義共同的依賴關係,統一管理項目,確保應用的各個子模塊的依賴和版本一致。同時能夠避免在每一個子模塊中都聲明一個版本號,這樣在升級或者切換到另外一個版本時,只須要在父pom裏更新,不須要到每個子模塊裏修改;若是某個子模塊須要另一個版本時,只須要在其dependencies中聲明另外一個版本便可。子項目就會使用子pom中聲明的版本號,覆蓋父pom聲明的版本。

*/
/*

dependencies 
全部聲明在dependencies裏的依賴都會自動引入,並默認被全部的子pom繼承。

dependencyManagement
只是聲明依賴,並不實際引入,所以子pom須要顯示的聲明須要用的依賴。若是不在子pom中聲明依賴,是不會從父pom中繼承下來的;只有在子pom中寫了該依賴項,而且沒有指定具體版本,纔會從父pom中繼承該項,而且version和scope都讀取自父pom;另外若是子pom中指定了版本號,那麼會使用子pom中指定的版本。


*/

3.1.2 子項目1 POM(hello_ch1)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_ch1</artifactId>

  <!-- 繼承parent項目中的pom.xml配置 -->
  <parent>
      <groupId>cn.test.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <!-- 相對路徑 -->
      <relativePath>../hello_parent/pom.xml</relativePath>
  </parent>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>        
    </dependencies>
</project>
/*
parent標籤

artifactId
父pom的artifact標識符

groupId
父pom的group標識符

version
父pom的版本

relativePath

父項目的pom.xml文件的相對路徑。默認值爲../pom.xml。maven首先從當前構建項目開始查找父項目的pom文件,而後從本地倉庫,最有從遠程倉庫。RelativePath容許你選擇一個不一樣的位置。

*/

3.1.3 子項目2 POM(hello_ch2)blog

<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_ch2</artifactId>
  <name>hello_ch2</name>
  <!-- 繼承parent項目中的pom.xml配置 -->
  <parent>
      <groupId>cn.test.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../hello_parent/pom.xml</relativePath>
  </parent>
 
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <!-- hello_ch2使用junit 4.8;不繼承父pom中的 junit 4.9 -->
            <version>4.8</version>
            <artifactId>junit</artifactId>
        </dependency>    

        <dependency>
            <groupId>cn.test.maven</groupId>
            <artifactId>hello_ch1</artifactId>
        </dependency>    
    </dependencies>
</project>

3.1.4 子項目3 POM(hello_ch3)

<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>
      <groupId>cn.test.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../hello_parent/pom.xml</relativePath>
  </parent>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>    

        <dependency>
            <groupId>cn.test.maven</groupId>
            <artifactId>hello_ch2</artifactId>
        </dependency>    
    </dependencies>
</project>

4.在parent項目中構建:

image

相關文章
相關標籤/搜索