天天看點

maven使用總結(三)繼承聚合父pom的配置

本篇部落格我們接着講maven的第三個好處,統一的管理項目資訊:

- 我們可以使我們的pom檔案直接繼承超級pom檔案,當然我們也可以繼承我們自己的pom檔案,這時我們可以更友善的對項目進行統一管理。當然了解這些之前我們還是要掌握一些基本的知識——繼承和聚合

- 要說項目的依賴就不得不說pom的繼承了,在前面的部落格我也有涉及到繼承的東西,下面我們詳細的說一下項目中的繼承。

繼承

被繼承項目與繼承項目是父子目錄關系

<modelVersion>4.0.0</modelVersion>
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>  
</project>
           
  • 然後我們有另一個項目projectB,而且projectB是跟projectA的pom.xml檔案處于同一個目錄下,這時候如果projectB需要繼承自projectA的話我們可以這樣定義projectB的pom.xml檔案。
<parent>
    <groupId>com.tiantian.mavenTest</groupId>
    <artifactId>projectA</artifactId>  
    <version>1.0-SNAPSHOT</version>
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>
  <artifactId>projectB</artifactId>
  <packaging>jar</packaging> 
  <version>1.0-SNAPSHOT</version> 
</project>
           
  • 個Maven項目時,我們需要在自己的pom.xml中定義一個parent元素,在這個元素中指明需要繼承項目的groupId、artifactId和version。
  • 當被繼承項目與繼承項目的目錄結構不是父子關系的時候,我們再利用上面的配置是不能實作Maven項目的繼承關系的,這個時候我們就需要在子項目的pom.xml檔案定義中的parent元素下再加上一個relativePath元素的定義,用以描述父項目的pom.xml檔案相對于子項目的pom.xml檔案的位置。
  • 假設我們現在還是有上面兩個項目,projectA和projectB,projectB還是繼承自projectA,但是現在projectB不在projectA的子目錄中,而是與projectA處于同一目錄中。這個時候projectA和projectB的目錄結構如下:
------projectA

              ------pom.xml

  ------projectB

              ------pom.xml
           
  • 這個時候我們可以看出projectA的pom.xml相對于projectB的pom.xml的位置是“../projectA/pom.xml”,是以這個時候projectB的pom.xml的定義應該如下所示:
parent>  
    <groupId>com.tiantian.mavenTest</groupId> 
    <artifactId>projectA</artifactId> 
    <version>1.0-SNAPSHOT</version> 
       <relativePath>../projectA/pom.xml</relativePath>
  </parent>  
  <modelVersion>4.0.0</modelVersion> 
  <groupId>com.tiantian.mavenTest</groupId>
  <artifactId>projectB</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>
</project> 
           

聚合

  • 較大的Maven項目一般會被拆分成多個子產品(例如springframework分為spring-core、spring-context等)。如果每次建構整個項目時都需要依次建構多個子產品就顯得十分不便。Maven通過聚合子產品将一組子產品進行統一管理。
  • 聚合子產品隻有一個pom.xml檔案,且坐标中的packaging元素固定為pom。被聚合子產品管理的其他子產品通過modules元素聲明:
<modules>
    <module>module-1</module>
    <module>module-2</module>
</modules>
           
  • 聚合子產品一般為主從結構,即被聚合的子產品作為聚合子產品的子目錄存儲。但此要求不是必須的,也可以将聚合子產品與被聚合子產品平級存儲,這時需要注意修改module元素中的路徑:
<modules>
    <module>../module-1</module>
    <module>../module-2</module>
</modules>
           
  • 義了聚合子產品之後,就可以通過聚合子產品對其包含的所有子產品統一進行建構操作了。

父pom的配置

大概了解了繼承和聚合的配置,我們還需要進一步了解一下父pom的配置才能更好的了解maven帶給我們的統一配置:

<properties>

标簽

  • 定義變量,可以在父pom檔案和其子pom檔案中使用,最常用的用法就是定義項目中使用jar包的版本資訊,如:
properties>
<!--
統一在這管理版本号 -->
<itoo-tool.version>0.0.1-SNAPSHOT</itoo-tool.version>
<itoo-base.version>0.0.1-SNAPSHOT</itoo-base.version>
<hibernate.version>4.3.7.Final</hibernate.version>
<javaee-api.version>6.0</javaee-api.version>
<spring.version>4.0.8.RELEASE</spring.version>
</properties>
           

<dependencyManagement>

标簽:

  • 定義項目中所有依賴的jar包,但是并不是說父項目的依賴中會添加這些jar包的依賴隻是定義,子項目中如果需要引用這些jar隻需要聲明和資訊就可以,版本資訊可寫可不寫,寫的話就使用自己的版本不寫的話,就使用父pom中聲明的版本,如:

    父pom中:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencyManagement>
           

子pom中:

<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
</dependencies>
           

這樣配置如果項目的版本發生變化,隻需修改父pom中的版本資訊,就可以實作版本的更新,也就是版本的統一管理。

繼續閱讀