天天看點

maven工程pom.xml檔案講解

  • 6.1     簡介
  • 6.2     pom.xml的繼承、聚合與依賴
  • 6.2.1繼承
  • 6.2.1.1被繼承項目與繼承項目是父子目錄關系
  • 6.2.1.2被繼承項目與繼承項目的目錄結構不是父子關系
  • 6.2.2聚合
  • 6.2.2.1被聚合項目和子子產品項目在目錄結構上是父子關系
  • 6.2.2.2被聚合項目與子子產品項目在目錄結構上不是父子關系
  • 6.2.2.3聚合與繼承同時進行
  • 6.2.3依賴Dependency
  • 6.3     屬性

6.1     簡介

       pom.xml檔案是Maven進行工作的主要配置檔案。在這個檔案中我們可以配置Maven項目的groupId、artifactId和version等Maven項目必須的元素;可以配置Maven項目需要使用的遠端倉庫;可以定義Maven項目打包的形式;可以定義Maven項目的資源依賴關系等等。對于一個最簡單的pom.xml的定義必須包含modelVersion、groupId、artifactId和version這四個元素,當然這其中的元素也是可以從它的父項目中繼承的。在Maven中,使用groupId、artifactId和version組成groupdId:artifactId:version的形式來唯一确定一個項目。

6.2     pom.xml的繼承、聚合與依賴

       我們知道Maven在建立項目的時候是基于Maven項目下的pom.xml進行的,我們項目依賴的資訊和一些基本資訊都是在這個檔案裡面定義的。那如果當我們有多個項目要進行,這多個項目有些配置内容是相同的,有些是要彼此關聯的,那如果按照傳統的做法的話我們就需要在多個項目中都定義這些重複的内容。這無疑是非常耗費時間和不易維護的。好在Maven給我們提供了一個pom的繼承和聚合的功能。

       對于使用java的人而言,繼承這個詞大家應該都不陌生。要繼承pom就需要有一個父pom,在Maven中定義了超級pom.xml,任何沒有申明自己父pom.xml的pom.xml都将預設繼承自這個超級pom.xml。

       先來看一下這個超級pom.xml的定義:

Xml代碼   

maven工程pom.xml檔案講解
  1. <project>  
  2.   <modelVersion>4.0.0</modelVersion>  
  3.   <name>Maven Default Project</name>  
  4.   <repositories>  
  5.     <repository>  
  6.       <id>central</id>  
  7.       <name>Maven Repository Switchboard</name>  
  8.       <layout>default</layout>  
  9.       <url>http://repo1.maven.org/maven2</url>  
  10.       <snapshots>  
  11.         <enabled>false</enabled>  
  12.       </snapshots>  
  13.     </repository>  
  14.   </repositories>  
  15.   <pluginRepositories>  
  16.     <pluginRepository>  
  17.       <id>central</id>  
  18.       <name>Maven Plugin Repository</name>  
  19.       <url>http://repo1.maven.org/maven2</url>  
  20.       <layout>default</layout>  
  21.       <snapshots>  
  22.         <enabled>false</enabled>  
  23.       </snapshots>  
  24.       <releases>  
  25.         <updatePolicy>never</updatePolicy>  
  26.       </releases>  
  27.     </pluginRepository>  
  28.   </pluginRepositories>  
  29.   <build>  
  30.     <directory>${project.basedir}/target</directory>  
  31.     <outputDirectory>${project.build.directory}/classes</outputDirectory>  
  32.     <finalName>${project.artifactId}-${project.version}</finalName>  
  33.     <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>  
  34.     <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>  
  35.     <!-- TODO: MNG-3731 maven-plugin-tools-api < 2.4.4 expect this to be relative... -->  
  36.     <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>  
  37.     <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>  
  38.     <resources>  
  39.       <resource>  
  40.         <directory>${project.basedir}/src/main/resources</directory>  
  41.       </resource>  
  42.     </resources>  
  43.     <testResources>  
  44.       <testResource>  
  45.         <directory>${project.basedir}/src/test/resources</directory>  
  46.       </testResource>  
  47.     </testResources>  
  48.    <pluginManagement>  
  49.        <plugins>  
  50.          <plugin>  
  51.            <artifactId>maven-antrun-plugin</artifactId>  
  52.            <version>1.3</version>  
  53.          </plugin>        
  54.          <plugin>  
  55.            <artifactId>maven-assembly-plugin</artifactId>  
  56.            <version>2.2-beta-2</version>  
  57.          </plugin>          
  58.          <plugin>  
  59.            <artifactId>maven-clean-plugin</artifactId>  
  60.            <version>2.2</version>  
  61.          </plugin>  
  62.          <plugin>  
  63.            <artifactId>maven-compiler-plugin</artifactId>  
  64.            <version>2.0.2</version>  
  65.          </plugin>  
  66.          <plugin>  
  67.            <artifactId>maven-dependency-plugin</artifactId>  
  68.            <version>2.0</version>  
  69.          </plugin>  
  70.          <plugin>  
  71.            <artifactId>maven-deploy-plugin</artifactId>  
  72.            <version>2.4</version>  
  73.          </plugin>  
  74.          <plugin>  
  75.            <artifactId>maven-ear-plugin</artifactId>  
  76.            <version>2.3.1</version>  
  77.          </plugin>  
  78.          <plugin>  
  79.            <artifactId>maven-ejb-plugin</artifactId>  
  80.            <version>2.1</version>  
  81.          </plugin>  
  82.          <plugin>  
  83.            <artifactId>maven-install-plugin</artifactId>  
  84.            <version>2.2</version>  
  85.          </plugin>  
  86.          <plugin>  
  87.            <artifactId>maven-jar-plugin</artifactId>  
  88.            <version>2.2</version>  
  89.          </plugin>  
  90.          <plugin>  
  91.            <artifactId>maven-javadoc-plugin</artifactId>  
  92.            <version>2.5</version>  
  93.          </plugin>  
  94.          <plugin>  
  95.            <artifactId>maven-plugin-plugin</artifactId>  
  96.            <version>2.4.3</version>  
  97.          </plugin>  
  98.          <plugin>  
  99.            <artifactId>maven-rar-plugin</artifactId>  
  100.            <version>2.2</version>  
  101.          </plugin>         
  102.          <plugin>                 
  103.            <artifactId>maven-release-plugin</artifactId>  
  104.            <version>2.0-beta-8</version>  
  105.          </plugin>  
  106.          <plugin>                  
  107.            <artifactId>maven-resources-plugin</artifactId>  
  108.            <version>2.3</version>  
  109.          </plugin>  
  110.          <plugin>  
  111.            <artifactId>maven-site-plugin</artifactId>  
  112.            <version>2.0-beta-7</version>  
  113.          </plugin>  
  114.          <plugin>  
  115.            <artifactId>maven-source-plugin</artifactId>  
  116.            <version>2.0.4</version>  
  117.          </plugin>          
  118.          <plugin>  
  119.             <artifactId>maven-surefire-plugin</artifactId>  
  120.             <version>2.4.3</version>  
  121.          </plugin>  
  122.          <plugin>  
  123.            <artifactId>maven-war-plugin</artifactId>  
  124.            <version>2.1-alpha-2</version>  
  125.          </plugin>  
  126.        </plugins>  
  127.      </pluginManagement>  
  128.   </build>  
  129.   <reporting>  
  130.     <outputDirectory>${project.build.directory}/site</outputDirectory>  
  131.   </reporting>  
  132.   <profiles>  
  133.     <profile>  
  134.       <id>release-profile</id>  
  135.       <activation>  
  136.         <property>  
  137.           <name>performRelease</name>  
  138.           <value>true</value>  
  139.         </property>  
  140.       </activation>  
  141.       <build>  
  142.         <plugins>  
  143.           <plugin>  
  144.             <inherited>true</inherited>  
  145.             <groupId>org.apache.maven.plugins</groupId>  
  146.             <artifactId>maven-source-plugin</artifactId>  
  147.             <executions>  
  148.               <execution>  
  149.                 <id>attach-sources</id>  
  150.                 <goals>  
  151.                   <goal>jar</goal>  
  152.                 </goals>  
  153.               </execution>  
  154.             </executions>  
  155.           </plugin>  
  156.           <plugin>  
  157.             <inherited>true</inherited>  
  158.             <groupId>org.apache.maven.plugins</groupId>  
  159.             <artifactId>maven-javadoc-plugin</artifactId>  
  160.             <executions>  
  161.               <execution>  
  162.                 <id>attach-javadocs</id>  
  163.                 <goals>  
  164.                   <goal>jar</goal>  
  165.                 </goals>  
  166.               </execution>  
  167.             </executions>  
  168.           </plugin>  
  169.           <plugin>  
  170.             <inherited>true</inherited>  
  171.             <groupId>org.apache.maven.plugins</groupId>  
  172.             <artifactId>maven-deploy-plugin</artifactId>  
  173.             <configuration>  
  174.               <updateReleaseInfo>true</updateReleaseInfo>  
  175.             </configuration>  
  176.           </plugin>  
  177.         </plugins>  
  178.       </build>  
  179.     </profile>  
  180.   </profiles>  
  181. </project>  

       對于一個pom.xml來說有幾個元素是必須定義的,一個是project根元素,然後就是它裡面的modelVersion、groupId、artifactId和version。由上面的超級pom.xml的内容我們可以看到pom.xml中沒有groupId、artifactId和version的定義,是以我們在建立自己的pom.xml的時候就需要定義這三個元素。和java裡面的繼承類似,子pom.xml會完全繼承父pom.xml中所有的元素,而且對于相同的元素,一般子pom.xml中的會覆寫父pom.xml中的元素,但是有幾個特殊的元素它們會進行合并而不是覆寫。這些特殊的元素是:

Ø  dependencies

Ø  developers

Ø  contributors

Ø  plugin清單,包括plugin下面的reports

Ø  resources

6.2.1繼承

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

       現在假設我們有一個項目projectA,它的pom.xml定義如下:

Xml代碼   

maven工程pom.xml檔案講解
  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.tiantian.mavenTest</groupId>  
  5.   <artifactId>projectA</artifactId>  
  6.   <packaging>jar</packaging>  
  7.   <version>1.0-SNAPSHOT</version>  
  8. </project>  

       然後我們有另一個項目projectB,而且projectB是跟projectA的pom.xml檔案處于同一個目錄下,這時候如果projectB需要繼承自projectA的話我們可以這樣定義projectB的pom.xml檔案。

Xml代碼   

maven工程pom.xml檔案講解
  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.   <parent>  
  4.     <groupId>com.tiantian.mavenTest</groupId>  
  5.     <artifactId>projectA</artifactId>  
  6.     <version>1.0-SNAPSHOT</version>  
  7.   </parent>  
  8.   <modelVersion>4.0.0</modelVersion>  
  9.   <groupId>com.tiantian.mavenTest</groupId>  
  10.   <artifactId>projectB</artifactId>  
  11.   <packaging>jar</packaging>  
  12.   <version>1.0-SNAPSHOT</version>  
  13. </project>  

       由projectB的pom.xml檔案的定義我們可以知道,當需要繼承指定的一個Maven項目時,我們需要在自己的pom.xml中定義一個parent元素,在這個元素中指明需要繼承項目的groupId、artifactId和version。

6.2.1.2被繼承項目與繼承項目的目錄結構不是父子關系

       當被繼承項目與繼承項目的目錄結構不是父子關系的時候,我們再利用上面的配置是不能實作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的定義應該如下所示:

Xml代碼   

maven工程pom.xml檔案講解
  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.   <parent>  
  4.     <groupId>com.tiantian.mavenTest</groupId>  
  5.     <artifactId>projectA</artifactId>  
  6.     <version>1.0-SNAPSHOT</version>  
  7.        <relativePath>../projectA/pom.xml</relativePath>  
  8.   </parent>  
  9.   <modelVersion>4.0.0</modelVersion>  
  10.   <groupId>com.tiantian.mavenTest</groupId>  
  11.   <artifactId>projectB</artifactId>  
  12.   <packaging>jar</packaging>  
  13.   <version>1.0-SNAPSHOT</version>  
  14. </project>  

6.2.2聚合

       對于聚合這個概念搞java的人應該都不會陌生。先來說說我對聚合和被聚合的了解,比如說如果projectA聚合到projectB,那麼我們就可以說projectA是projectB的子子產品, projectB是被聚合項目,也可以類似于繼承那樣稱為父項目。對于聚合而言,這個主體應該是被聚合的項目。是以,我們需要在被聚合的項目中定義它的子子產品,而不是像繼承那樣在子項目中定義父項目。具體做法是:

Ø  修改被聚合項目的pom.xml中的packaging元素的值為pom

Ø  在被聚合項目的pom.xml中的modules元素下指定它的子子產品項目

對于聚合而言,當我們在被聚合的項目上使用Maven指令時,實際上這些指令都會在它的子子產品項目上使用。這就是Maven中聚合的一個非常重要的作用。假設這樣一種情況,你同時需要打包或者編譯projectA、projectB、projectC和projectD,按照正常的邏輯我們一個一個項目去使用mvn compile或mvn package進行編譯和打包,對于使用Maven而言,你還是這樣使用的話是非常麻煩的。因為Maven給我們提供了聚合的功能。我們隻需要再定義一個超級項目,然後在超級項目的pom.xml中定義這個幾個項目都是聚合到這個超級項目的。之後我們隻需要對這個超級項目進行mvn compile,它就會把那些子子產品項目都進行編譯。

6.2.2.1被聚合項目和子子產品項目在目錄結構上是父子關系

還拿上面定義的projectA和projectB來舉例子,現在假設我們需要把projectB聚合到projectA中。projectA和projectB的目錄結構如下所示:

------projectA

       ------projectB

              -----pom.xml

       ------pom.xml

這個時候projectA的pom.xml應該這樣定義:

Xml代碼   

maven工程pom.xml檔案講解
  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/xsd/maven-4.0.0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.tiantian.mavenTest</groupId>  
  5.   <artifactId>projectA</artifactId>  
  6.   <version>1.0-SNAPSHOT</version>  
  7.   <packaging>pom</packaging>  
  8.   <modules>  
  9.        <module>projectB</module>  
  10.   </modules>  
  11. </project>  

由上面的定義我們可以看到被聚合的項目的packaging類型應該為pom,而且一個項目可以有多個子子產品項目。對于聚合這種情況,我們使用子子產品項目的artifactId來作為module的值,表示子子產品項目相對于被聚合項目的位址,在上面的示例中就表示子子產品projectB是處在被聚合項目的子目錄下,即與被聚合項目的pom.xml處于同一目錄。這裡使用的module值是子子產品projectB對應的目錄名projectB,而不是子子產品對應的artifactId。這個時候當我們對projectA進行mvn package指令時,實際上Maven也會對projectB進行打包。

6.2.2.2被聚合項目與子子產品項目在目錄結構上不是父子關系

那麼當被聚合項目與子子產品項目在目錄結構上不是父子關系的時候,我們應該怎麼來進行聚合呢?還是像繼承那樣使用relativePath元素嗎?答案是非也,具體做法是在module元素中指定以相對路徑的方式指定子子產品。我們來看下面一個例子。

繼續使用上面的projectA和projectB,還是需要把projectB聚合到projectA,但是projectA和projectB的目錄結構不再是父子關系,而是如下所示的這種關系:

------projectA

       ------pom.xml

------projectB

       ------pom.xml

這個時候projectA的pom.xml檔案就應該這樣定義:

Xml代碼   

maven工程pom.xml檔案講解
  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/xsd/maven-4.0.0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.tiantian.mavenTest</groupId>  
  5.   <artifactId>projectA</artifactId>  
  6.   <version>1.0-SNAPSHOT</version>  
  7.   <packaging>pom</packaging>  
  8.   <modules>  
  9.        <module>../projectB</module>  
  10.   </modules>  
  11. </project>  

注意看module的值是“../projectB”,我們知道“..”是代表目前目錄的上層目錄,是以它表示子子產品projectB是被聚合項目projectA的pom.xml檔案所在目錄(即projectA)的上層目錄下面的子目錄,即與projectA處于同一目錄層次。注意,這裡的projectB對應的是projectB這個項目的目錄名稱,而不是它的artifactId。

6.2.2.3聚合與繼承同時進行

       假設有這樣一種情況,有兩個項目,projectA和projectB,現在我們需要projectB繼承projectA,同時需要把projectB聚合到projectA。然後projectA和projectB的目錄結構如下:

       ------projectA

              ------pom.xml

       ------projectB

              ------pom.xml

       那麼這個時候按照上面說的那樣,projectA的pom.xml中需要定義它的packaging為pom,需要定義它的modules,是以projectA的pom.xml應該這樣定義:

Xml代碼   

maven工程pom.xml檔案講解
  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/xsd/maven-4.0.0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.tiantian.mavenTest</groupId>  
  5.   <artifactId>projectA</artifactId>  
  6.   <version>1.0-SNAPSHOT</version>  
  7.   <packaging>pom</packaging>  
  8.   <modules>  
  9.        <module>../projectB</module>  
  10.   </modules>  
  11. </project>  

       而projectB是繼承自projectA的,是以我們需要在projectB的pom.xml檔案中新增一個parent元素,用以定義它繼承的項目資訊。是以projectB的pom.xml檔案的内容應該這樣定義:

Xml代碼   

maven工程pom.xml檔案講解
  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/xsd/maven-4.0.0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <parent>  
  5.        <groupId>com.tiantian.mavenTest</groupId>  
  6.        <artifactId>projectA</artifactId>  
  7.        <version>1.0-SNAPSHOT</version>  
  8.        <relativePath>../projectA/pom.xml</relativePath>  
  9.   </parent>  
  10.   <groupId>com.tiantian.mavenTest</groupId>  
  11.   <artifactId>projectB</artifactId>  
  12.   <version>1.0-SNAPSHOT</version>  
  13.   <packaging>jar</packaging>  
  14. </project>  

6.2.3依賴Dependency

       項目之間的依賴是通過pom.xml檔案裡面的dependencies元素下面的dependency元素進行的。一個dependency元素定義一個依賴關系。在dependency元素中我們主要通過依賴項目的groupId、artifactId和version來定義所依賴的項目。

       先來看一個簡單的項目依賴的示例吧,假設我現在有一個項目projectA,然後它裡面有對junit的依賴,那麼它的pom.xml就類似以下這個樣子:

Xml代碼   

maven工程pom.xml檔案講解
  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/xsd/maven-4.0.0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.tiantian.mavenTest</groupId>  
  5.   <artifactId>projectB</artifactId>  
  6.   <version>1.0-SNAPSHOT</version>  
  7.   <packaging>jar</packaging>  
  8.   <dependencies>  
  9.     <dependency>  
  10.       <groupId>junit</groupId>  
  11.       <artifactId>junit</artifactId>  
  12.       <version>3.8.1</version>  
  13.       <scope>test</scope>  
  14.               <optional>true</optional>  
  15.     </dependency>  
  16.   </dependencies>  
  17. </project>  

       在dependency元素中除了可以指定依賴項目的groupId、artifactId和version之外,還可以指定以下元素:

Ø  type:對應于依賴項目的packaging類型,預設是jar

Ø  scope:表示依賴項目的一個作用範圍。scope的主要取值範圍如下(還有一個是在Maven2.0.9以後版本才支援的import,關于import作用域将在後文《Dependency介紹》中做介紹):

n  compile:這是它的預設值,這種類型很容易讓人産生誤解,以為隻有在編譯的時候才是需要的,其實這種類型表示所有的情況都是有用的,包括編譯和運作時。而且這種類型的依賴性是可以傳遞的。

n  provided:這個跟compile很類似,但是它表示你期望這個依賴項目在運作時由JDK或者容器來提供。這種類型表示該依賴隻有在測試和編譯的情況下才有效,在運作時将由JDK或者容器提供。這種類型的依賴性是不可傳遞的。

n  runtime:這種類型表示該依賴在編譯的時候不是必須的,隻有在運作的時候才是必須的。

n  test:這表示這種依賴隻有測試的時候才需要,正常情況下是不需要的。

n  system:這種類型跟provided類似,唯一不同的就是這種類型的依賴我們要自己提供jar包,這需要與另一個元素systemPath來結合使用。systemPath将指向我們系統上的jar包的路徑,而且必須是給定的絕對路徑。

Ø  systemPath:上面已經說過了這個元素是在scope的值為system的時候用于指定依賴的jar包在系統上的位置的,而且是絕對路徑。該元素必須在依賴的 jar包的scope為system時才能使用,否則Maven将報錯。

Ø  optional:當該項目本身作為其他項目的一個依賴時标記該依賴為可選項。假設現在projectA有一個依賴性projectB,我們把projectB這個依賴項設為optional,這表示projectB在projectA的運作時不一定會用到。這個時候如果我們有另一個項目projectC,它依賴于projectA,那麼這個時候因為projectB對于projectA是可選的,是以Maven在建立projectC的時候就不會安裝projectB,這個時候如果projectC确實需要使用到projectB,那麼它就可以定義自己對projectB的依賴。當一個依賴是可選的時候,我們把optional元素的值設為true,否則就不設定optional元素。

Ø  exclusions:考慮這樣一種情況,我們的projectA依賴于projectB,然後projectB又依賴于projectC,但是在projectA裡面我們不需要projectB依賴的projectC,那麼這個時候我們就可以在依賴projectB的時候使用exclusions元素下面的exclusion排除projectC。這個時候我們可以這樣定義projectA對projectB的依賴:

Xml代碼   

maven工程pom.xml檔案講解
  1. <dependencies>  
  2.      <dependency>  
  3.             <groupId>com.tiantian.mavenTest</groupId>  
  4.             <artifactId>projectB</artifactId>  
  5.             <version>1.0-SNAPSHOT</version>  
  6.             <exclusions>  
  7.                    <exclusion>  
  8.                           <groupId>com.tiantian.mavenTest</groupId>  
  9.                           <artifactId>projectC</artifactId>  
  10.                    </exclusion>  
  11.             </exclusions>  
  12.      </dependency>  
  13. </dependencies>  

6.3     屬性

在pom.xml檔案中我們可以使用${propertyName}的形式引用屬性。這個propertyName有以下幾種形式:

Ø  env.propertyName:這種形式表示引用的是環境變量,比如我們需要引用目前系統的環境變量PATH的時候,就可以使用${env.PATH}。

Ø  project.propertyName:這種形式表示引用的是目前這個pom.xml中project根元素下面的子元素的值。比如我們需要引用目前project下面的version的時候,就可以使用${project.version}。

Ø  settings.propertyName:這種形式引用的是Maven本地配置檔案settings.xml或本地Maven安裝目錄下的settings.xml檔案根元素settings下的元素。比如我們需要引用settings下的本地倉庫localRepository元素的值時,我們可以用${settings.localRepository}

Ø  java的系統屬性,所有在java中使用java.lang.System.getProperties()能夠擷取到的屬性都可以在pom.xml中引用,比如${java.home}。

Ø  pom.xml中properties元素下面的子元素作為屬性。假如在pom.xml中有如下一段代碼<properties><hello.world>helloWorld</hello.world></properties>,那麼我們就可以使用${hello.world}引用到對應的helloWorld。