[Maven]-pom.xml文件詳解

一、概述

??當(dāng)我們使用Maven來管理和構(gòu)建我們的項目的時候姥敛,我們會不可避免的遇到pom文件浆劲。雖然已經(jīng)配置過pom.xml好多次,但一直沒有系統(tǒng)的學(xué)習(xí)過烫扼,現(xiàn)在回過頭來準(zhǔn)備再系統(tǒng)的學(xué)習(xí)下曙求。

首先,我們先看下官網(wǎng)文檔:Apache Maven Project - Introduction to the POM映企,本文的所有內(nèi)容基本都是基于官網(wǎng)文檔來的悟狱。

??A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project. It contains default values for most projects. Examples for this is the build directory, which is target; the source directory, which is src/main/java; the test source directory, which is src/test/java; and so on.
??The POM was renamed from project.xml in Maven 1 to pom.xml in Maven 2. Instead of having a maven.xml file that contains the goals that can be executed, the goals or plugins are now configured in the pom.xml. When executing a task or goal, Maven looks for the POM in the current directory. It reads the POM, gets the needed configuration information, then executes the goal.
??Some of the configuration that can be specified in the POM are the project dependencies, the plugins or goals that can be executed, the build profiles, and so on. Other information such as the project version, description, developers, mailing lists and such can also be specified.

通過介紹,我們大致了解下:

POM(Project Object Model堰氓,即項目對象模型)是Maven工程的基本工作單元挤渐,是一個XML文件,包含了Maven用于構(gòu)建項目的項目信息及各種配置信息双絮,比如項目依賴浴麻,項目開發(fā)人員,版本囤攀,插件软免,組織信息、項目授權(quán)焚挠、項目的 url等等膏萧。我們通過POM文件來完成對Maven項目的管理,構(gòu)建等操作蝌衔。

二榛泛、pom文件節(jié)點

pom.xml文件的節(jié)點大致可以分為以下幾個部分:

<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>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>

    <!-- 依賴配置 -->
    <dependencies>...</dependencies>
    <parent>...</parent>
    <dependencyManagement>...</dependencyManagement>
    <modules>...</modules>
    <properties>...</properties>

    <!-- 構(gòu)建配置 -->
    <build>...</build>
    <reporting>...</reporting>

    <!-- 項目信息 -->
    <name>...</name>
    <description>...</description>
    <url>...</url>
    <inceptionYear>...</inceptionYear>
    <licenses>...</licenses>
    <organization>...</organization>
    <developers>...</developers>
    <contributors>...</contributors>

    <!-- 環(huán)境設(shè)置 -->
    <issueManagement>...</issueManagement>
    <ciManagement>...</ciManagement>
    <mailingLists>...</mailingLists>
    <scm>...</scm>
    <prerequisites>...</prerequisites>
    <repositories>...</repositories>
    <pluginRepositories>...</pluginRepositories>
    <distributionManagement>...</distributionManagement>
    <profiles>...</profiles>
</project>

接下來,我們就這幾個部分進行挨個學(xué)習(xí)噩斟。

1. 基礎(chǔ)配置信息
<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模型版本曹锨,maven2和3只能為4.0.0-->
   <modelVersion>4.0.0</modelVersion>
   <!-- 項目的組ID,用于maven定位-->
   <groupId>com.company.bank</groupId>
   <!-- 項目ID剃允,通常是項目的名稱,唯一標(biāo)識符-->
   <artifactId>parent</artifactId>
   <!-- 項目的版本-->
   <version>0.0.1-SNAPSHOT</version>
   <!-- 項目的打包方式-->
   <packaging>war</packaging>
<project>

pom.xml文件中艘希,最外層的標(biāo)簽是project標(biāo)簽硼身,該標(biāo)簽定義了如下屬性:

  1. xmlns屬性:表明了該標(biāo)簽下元素的默認(rèn)命名空間是:http://maven.apache.org/POM/4.0.0,xml文件中覆享,定義命名空間的格式為:xmlns:namespace-prefix="namespaceURI"佳遂,而定義默認(rèn)命名空間的格式為:xmlns="namespaceURI";
  2. xmlns:xsi屬性:定義了一個namespace-prefix撒顿,其代表的命名空間URI為:http://www.w3.org/2001/XMLSchema-instance丑罪,定義該命名空間主要是為了更方便的使用其所代表的命名空間中的schemaLocation屬性;其中凤壁,使用xsi作為namespace-prefix实胸,并不是硬性規(guī)定劳闹,只是一種通用的選擇,當(dāng)然也可以改成別的命名;
  3. xsi:schemaLocation屬性:該屬性的使用格式為:xsi:schemaLocation="namespaceURI1 schemaURI1 namespaceURI2 schemaURI2 ..."缤骨,這里是說使用schemaURI1所對應(yīng)的schema文件祠丝,校驗命名空間namespaceURI1下的元素是否符合XML語法規(guī)范钾军,后面的則是以此類推窒舟。

再來看一下基礎(chǔ)信息的幾個節(jié)點:

節(jié)點 對應(yīng)的解釋
modelVersion pom模型版本,根據(jù)官方文檔淌哟,Maven2和3只能為4.0.0
groupId 項目組id迹卢,表明該項目所屬的組織或公司,命名規(guī)則通常為組織或公司域名反轉(zhuǎn)徒仓,然后再加項目名稱
artifactId 項目的id腐碱,有時候和項目名保持一致,有時候是項目名 + 模塊名掉弛,該id是唯一的症见,一個goupId下面可能會有多個artifactId,就是通過artifactId區(qū)分殃饿。比如:consumer-banking谋作。
version 當(dāng)前項目的版本號,一般是:大版本.小版本.增量版本-限定版本號壁晒,SHAPSHOT意為快照瓷们,說明該項目還處于開發(fā)中
packaging 項目的打包方式业栅,常用可選值:pom, jar, ejb, maven-plugin, war, ear, rar, par等秒咐,默認(rèn)方式為jar
2. 項目信息

下面再來看下項目的一些信息:

節(jié)點 對應(yīng)的解釋
name 聲明了一個對于用戶更加友好的項目名稱,非必須項碘裕,一般用于Maven生成的文檔
description 項目的詳細(xì)描述信息携取,能使用HTML格式描述時不建議使用純文本來描述, 一般用于Maven生成的文檔
url 項目主頁的url帮孔,一般用于Maven生成的文檔
inceptionYear 項目開始的年份雷滋,一般是4位數(shù)字不撑,涉及到介紹情況時用作提供版權(quán)信息
licenses 當(dāng)前項目所有的許可文件,每一個許可文件用一個許可元素來描述晤斩,然后描述額外的元素焕檬。 通常只列出適用于這個項目的許可文件,無需列出依賴項目的 許可文件列表澳泵。如果列出多個license实愚,那么用戶可以選擇其中所需的,而不是接受所有的許可文件兔辅。
organization 組織相關(guān)信息
developers 項目開發(fā)人員列表
contributors 項目其他貢獻者列表腊敲,同developers

licenses列表:

<license>    
    <!--license用于法律上的名稱-->    
    <name>...</name>     
    <!--官方的license正文頁面的URL-->    
    <url>....</url>
    <!--項目分發(fā)的主要方式:repo,可以從Maven庫下載 manual维苔, 用戶必須手動下載和安裝依賴-->    
    <distribution>repo</distribution>     
    <!--關(guān)于license的補充信息-->    
    <comments>....</comments>     
</license>

organization屬性:

<organization>
    <!-- 組織的主頁 -->
    <url>...</url>
    <!-- 組織名稱 -->
    <name>...</name>
</organization>

developers屬性:

<developers>  
    <!--某個開發(fā)者信息-->
    <developer>  
        <!--開發(fā)者的唯一標(biāo)識符-->
        <id>....</id>  
        <!--開發(fā)者的全名-->
        <name>...</name>  
        <!--開發(fā)者的email-->
        <email>...</email>  
        <!--開發(fā)者的主頁-->
        <url>...<url/>
        <!--開發(fā)者在項目中的角色-->
        <roles>  
            <role>Java Dev</role>  
            <role>Web UI</role>  
        </roles> 
        <!--開發(fā)者所屬組織--> 
        <organization>sun</organization>  
        <!--開發(fā)者所屬組織的URL-->
        <organizationUrl>...</organizationUrl>  
        <!--開發(fā)者屬性碰辅,如即時消息如何處理等-->
        <properties>
        <!-- 和主標(biāo)簽中的properties一樣,可以隨意定義子標(biāo)簽 -->
        </properties> 
        <!--開發(fā)者所在時區(qū)介时, -11到12范圍內(nèi)的整數(shù)没宾。--> 
        <timezone>-5</timezone>  
    </developer>  
</developers>

contributors屬性:

<contributors>
    <contributor>
        ...
    </contributor>
</contributors>
3. 依賴配置
  1. dependencies:項目相關(guān)依賴,如果父項目中的依賴潮尝,會被子項目引用榕吼,所以一般在父項目中定義子項目中共有的依賴。并且如果有需要勉失,子項目可以修改所依賴包的版本:
<dependencies>
    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
    </dependency>
</dependencies>
  1. parent:用于確定父項目的坐標(biāo)位置羹蚣。
<parent>
    <groupId>com.learnPro</groupId>
    <artifactId>SIP-parent</artifactId>
    <relativePath></relativePath>
    <version>0.0.1-SNAPSHOT</version>
</parent>
  • groupId: 父項目的組Id標(biāo)識符
  • artifactId:父項目的唯一標(biāo)識符
  • relativePath:Maven首先在當(dāng)前項目中找父項目的pom,然后在文件系統(tǒng)的這個位置(relativePath)查找乱凿,然后在本地倉庫查找顽素,再在遠(yuǎn)程倉庫找。
  • version:父項目的版本
  1. dependencyManagement:用于幫助管理children的依賴徒蟆。例如如果parent使用dependencyManagement定義了一個junit:junit4.0胁出,那么它的children就可以只引用 groupId和artifactId,而version就可以直接使用父模塊的段审,如果有需要全蝶,我們也可以設(shè)置version,這樣的好處就是可以集中管理依賴的詳情寺枉,并且也更靈活抑淫。
    ??不過dependencyManagement里只是聲明依賴,并不實現(xiàn)引入姥闪,因此子項目需要顯示的聲明需要用的依賴始苇。配置同dependencies類似;
<!-- 父項目中定義:-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<!-- 子項目先通過parent繼承之后筐喳,就可以引入使用了 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

dependencies幾個重要的屬性介紹:

  1. type屬性催式,依賴的類型函喉,默認(rèn)為jar,指定pom荣月,可以定義整個pom文件管呵;
  2. scope屬性,當(dāng)前包的依賴范圍哺窄,用于限制依賴項的傳遞性撇寞,通過控制依賴的范圍,可以指定該依賴在什么階段有效堂氯。該屬性共有5個值蔑担,默認(rèn)是compile,也就是依賴關(guān)系在包含編譯咽白,測試啤握,運行的所有類路徑中都是可用的。而比如provided晶框,則是依賴關(guān)系在編譯和測試階段的類路徑中是可用的排抬。如需查看全部,可參考:Introduction to the Dependency Mechanism -Dependency Scope
  3. optional屬性授段,因為依賴是具有傳遞性的蹲蒲,例如 Project A 依賴于 Project B,B 依賴于 C侵贵,那么 B 對 C 的依賴關(guān)系也會傳遞給 A届搁,如果我們不需要這種傳遞性依賴,就可以通過設(shè)置該屬性的值窍育。默認(rèn)為false卡睦,即子項目默認(rèn)都繼承,true的話子項目必須顯示的引入漱抓,與dependencyManagement里定義的依賴類似表锻;
  4. exclusions和exclusion屬性,用于移除項目依賴相關(guān)乞娄,如果項目X需要A瞬逊,而A包含B依賴,那么X可以聲明不要B依賴仪或,只要在exclusions中聲明exclusion确镊,將B從依賴樹中刪除即可。這一般用于解決jar包沖突的問題溶其;
<dependencies>
    <dependency>
        <groupId>com.alibaba.china.shared</groupId>
        <artifactId>alibaba.apollo.webx</artifactId>
        <version>2.5.0</version>
        <exclusions>
          <exclusion>
            <artifactId>org.slf4j.slf4j-api</artifactId>
            <groupId>com.alibaba.external</groupId>
          </exclusion>
        </exclusions>
    </dependency>
</dependencies>
  1. modules:Maven項目的一大特點就是以多模塊著稱骚腥,該標(biāo)簽就是用于指定當(dāng)前項目所包含的模塊敦间,對該模塊進行的Maven操作瓶逃,會讓所有子模塊也進行相應(yīng)的操作束铭;
<modules>
   <module>com-a</>
   <module>com-b</>
   <module>com-c</>
<modules/>
  1. properties:該標(biāo)簽用于定義pom文件中的常量,這樣契沫,在pom文件的任何地方,都可以通過${java.version}來引用該值昔汉;
<properties>
    <!-- 定義常量 -->
    <rocketmq.version>3.2.6</rocketmq.version>
</properties>
<!-- 使用 -->
<dependency>
    <groupId>com.alibaba.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>${rocketmq.version}</version>
</dependency>
4. 構(gòu)建配置
  1. 所謂的build懈万,也就是項目構(gòu)建。在構(gòu)建配置的過程中靶病,一般包含兩個部分会通,一個是<build>,另一個是<reporting>娄周;而在Maven的pom.xml中build又分為兩種涕侈,一種被稱為Project Build,也就是<project>下的直接子元素煤辨,另一種<build>被稱為Profile Build裳涛,即是<profile>的直接子元素。Profile Build包含了基本的build元素众辨,而Project Build還包含兩個特殊的元素端三,即各種<...Directory>和<extensions>。
<build>
    <!--該元素設(shè)置了項目源碼目錄鹃彻,當(dāng)構(gòu)建項目的時候郊闯,構(gòu)建系統(tǒng)會編譯目錄里的源碼。該路徑是相對于pom.xml的相對路徑蛛株。-->
    <sourceDirectory/>
    <!--該元素設(shè)置了項目腳本源碼目錄虚婿,該目錄和源碼目錄不同:絕大多數(shù)情況下,該目錄下的內(nèi)容 會被拷貝到輸出目錄(因為腳本是被解釋的泳挥,而不是被編譯的)然痊。-->
    <scriptSourceDirectory/>
    <!--該元素設(shè)置了項目單元測試使用的源碼目錄,當(dāng)測試項目的時候屉符,構(gòu)建系統(tǒng)會編譯目錄里的源碼剧浸。該路徑是相對于pom.xml的相對路徑。-->
    <testSourceDirectory/>
    <!--被編譯過的應(yīng)用程序class文件存放的目錄矗钟。-->
    <outputDirectory/>
    <!--被編譯過的測試class文件存放的目錄唆香。-->
    <testOutputDirectory/>
    <!--使用來自該項目的一系列構(gòu)建擴展-->
    <extensions>
        <!--描述使用到的構(gòu)建擴展。-->
        <extension>
            <!--構(gòu)建擴展的groupId-->
            <groupId/>
            <!--構(gòu)建擴展的artifactId-->
            <artifactId/>
            <!--構(gòu)建擴展的版本-->
            <version/>
        </extension>
    </extensions>
    <!--當(dāng)項目沒有規(guī)定目標(biāo)(Maven2 叫做階段)時的默認(rèn)值-->
    <defaultGoal/>
    <!--這個元素描述了項目相關(guān)的所有資源路徑列表吨艇,例如和項目相關(guān)的屬性文件躬它,這些資源被包含在最終的打包文件里。-->
    <resources>
        <!--這個元素描述了項目相關(guān)或測試相關(guān)的所有資源路徑-->
        <resource>
            <!-- 描述了資源的目標(biāo)路徑东涡。該路徑相對target/classes目錄(例如${project.build.outputDirectory})冯吓。舉個例 子倘待,如果你想資源在特定的包里(org.apache.maven.messages),你就必須該元素設(shè)置為org/apache/maven /messages组贺。然而凸舵,如果你只是想把資源放到源碼目錄結(jié)構(gòu)里,就不需要該配置失尖。-->
            <targetPath/>
            <!--是否使用參數(shù)值代替參數(shù)名啊奄。參數(shù)值取自properties元素或者文件里配置的屬性,文件在filters元素里列出掀潮。-->
            <filtering/>
            <!--描述存放資源的目錄菇夸,該路徑相對POM路徑-->
            <directory/>
            <!--包含的模式列表,例如**/*.xml.-->
            <includes/>
            <!--排除的模式列表仪吧,例如**/*.xml-->
            <excludes/>
        </resource>
    </resources>
    <!--這個元素描述了單元測試相關(guān)的所有資源路徑峻仇,例如和單元測試相關(guān)的屬性文件。-->
    <testResources>
        <!--這個元素描述了測試相關(guān)的所有資源路徑邑商,參見build/resources/resource元素的說明-->
        <testResource>
            <targetPath/>
            <filtering/>
            <directory/>
            <includes/>
            <excludes/>
        </testResource>
    </testResources>
    <!--構(gòu)建產(chǎn)生的所有文件存放的目錄-->
    <directory/>
    <!--產(chǎn)生的構(gòu)件的文件名摄咆,默認(rèn)值是${artifactId}-${version}。-->
    <finalName/>
    <!--當(dāng)filtering開關(guān)打開時人断,使用到的過濾器屬性文件列表-->
    <filters/>
    <!--子項目可以引用的默認(rèn)插件信息吭从。該插件配置項直到被引用時才會被解析或綁定到生命周期。給定插件的任何本地配置都會覆蓋這里的配置-->
    <pluginManagement>
        <!--使用的插件列表 恶迈。-->
        <plugins>
            <!--plugin元素包含描述插件所需要的信息涩金。-->
            <plugin>
                <!--插件在倉庫里的group ID-->
                <groupId/>
                <!--插件在倉庫里的artifact ID-->
                <artifactId/>
                <!--被使用的插件的版本(或版本范圍)-->
                <version/>
                <!--是否從該插件下載Maven擴展(例如打包和類型處理器),由于性能原因暇仲,只有在真需要下載時步做,該元素才被設(shè)置成enabled。-->
                <extensions/>
                <!--在構(gòu)建生命周期中執(zhí)行一組目標(biāo)的配置奈附。每個目標(biāo)可能有不同的配置全度。-->
                <executions>
                    <!--execution元素包含了插件執(zhí)行需要的信息-->
                    <execution>
                        <!--執(zhí)行目標(biāo)的標(biāo)識符,用于標(biāo)識構(gòu)建過程中的目標(biāo)斥滤,或者匹配繼承過程中需要合并的執(zhí)行目標(biāo)-->
                        <id/>
                        <!--綁定了目標(biāo)的構(gòu)建生命周期階段将鸵,如果省略,目標(biāo)會被綁定到源數(shù)據(jù)里配置的默認(rèn)階段-->
                        <phase/>
                        <!--配置的執(zhí)行目標(biāo)-->
                        <goals/>
                        <!--配置是否被傳播到子POM-->
                        <inherited/>
                        <!--作為DOM對象的配置-->
                        <configuration/>
                    </execution>
                </executions>
                <!--項目引入插件所需要的額外依賴-->
                <dependencies>
                    <!--參見dependencies/dependency元素-->
                    <dependency>
                        ......
                    </dependency>
                </dependencies>
                <!--任何配置是否被傳播到子項目-->
                <inherited/>
                <!--作為DOM對象的配置-->
                <configuration/>
            </plugin>
        </plugins>
    </pluginManagement>
    <!--使用的插件列表-->
    <plugins>
        <!--參見build/pluginManagement/plugins/plugin元素-->
        <plugin>
            <groupId/>
            <artifactId/>
            <version/>
            <extensions/>
            <executions>
                <execution>
                    <id/>
                    <phase/>
                    <goals/>
                    <inherited/>
                    <configuration/>
                </execution>
            </executions>
            <dependencies>
                <!--參見dependencies/dependency元素-->
                <dependency>
                    ......
                </dependency>
            </dependencies>
            <goals/>
            <inherited/>
            <configuration/>
        </plugin>
    </plugins>
</build>
  1. reporting佑颇,該元素描述使用報表插件產(chǎn)生報表的規(guī)范顶掉。當(dāng)用戶執(zhí)行“mvn site”,這些報表就會運行挑胸。 在頁面導(dǎo)航欄能看到所有報表的鏈接痒筒。
<reporting>
    <!--true,則網(wǎng)站不包括默認(rèn)的報表。這包括“項目信息”菜單中的報表簿透。-->
    <excludeDefaults/>
    <!--所有產(chǎn)生的報表存放到哪里移袍。默認(rèn)值是${project.build.directory}/site。-->
    <outputDirectory/>
    <!--使用的報表插件和他們的配置萎战。-->
    <plugins>
        <!--plugin元素包含描述報表插件需要的信息-->
        <plugin>
            <!--報表插件在倉庫里的group ID-->
            <groupId/>
            <!--報表插件在倉庫里的artifact ID-->
            <artifactId/>
            <!--被使用的報表插件的版本(或版本范圍)-->
            <version/>
            <!--任何配置是否被傳播到子項目-->
            <inherited/>
            <!--報表插件的配置-->
            <configuration/>
            <!--一組報表的多重規(guī)范,每個規(guī)范可能有不同的配置舆逃。一個規(guī)范(報表集)對應(yīng)一個執(zhí)行目標(biāo) 蚂维。
              例如,有1路狮,2虫啥,3,4奄妨,5涂籽,6,7砸抛,8评雌,9個報表。1直焙,2景东,5構(gòu)成A報表集,對應(yīng)一個執(zhí)行目標(biāo)奔誓。
              2斤吐,5,8構(gòu)成B報表集厨喂,對應(yīng)另一個執(zhí)行目標(biāo)-->
            <reportSets>
                <!--表示報表的一個集合和措,以及產(chǎn)生該集合的配置-->
                <reportSet>
                    <!--報表集合的唯一標(biāo)識符,POM繼承時用到-->
                    <id/>
                    <!--產(chǎn)生報表集合時蜕煌,被使用的報表的配置-->
                    <configuration/>
                    <!--配置是否被繼承到子POMs-->
                    <inherited/>
                    <!--這個集合里使用到哪些報表-->
                    <reports/>
                </reportSet>
            </reportSets>
        </plugin>
    </plugins>
</reporting>
5. 環(huán)境配置
  1. issueManagement:用于缺陷系統(tǒng)的跟蹤與管理派阱,比如Bugzilla, Jira等管理工具:
<issueManagement> 
    <system>Bugzilla</system> 
    <url>http://127.0.0.1/bugzilla/</url> 
</issueManagement> 
  1. ciManagement:項目的持續(xù)集成信息:
<ciManagement>
    <system>continuum</system>
    <url>http://127.0.0.1:8080/continuum</url>
    <notifiers>
        <notifier>
            <type>mail</type>
            <sendOnError>true</sendOnError>
            <sendOnFailure>true</sendOnFailure>
            <sendOnSuccess>false</sendOnSuccess>
            <sendOnWarning>false</sendOnWarning>
            <address>continuum@127.0.0.1</address>
            <configuration></configuration>
        </notifier>
    </notifiers>
</ciManagement>
  1. system:持續(xù)集成系統(tǒng)的名字
  2. url:持續(xù)集成系統(tǒng)的URL
  3. notifiers:構(gòu)建完成時,需要通知的開發(fā)者/用戶的配置項斜纪。包括被通知者信息和通知條件(錯誤颁褂,失敗,成功傀广,警告)
  • type:通知方式
  • sendOnError:錯誤時是否通知
  • sendOnFailure:失敗時是否通知
  • sendOnSuccess:成功時是否通知
  • sendOnWarning:警告時是否通知
  • address:通知發(fā)送到的地址
  • configuration:擴展項
  1. mailingLists:項目相關(guān)郵件列表:
<mailingLists>
    <mailingList>
      <name>User List</name>
      <subscribe>user-subscribe@127.0.0.1</subscribe>
      <unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>
      <post>user@127.0.0.1</post>
      <archive>http://127.0.0.1/user/</archive>
      <otherArchives>
        <otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive>
      </otherArchives>
    </mailingList>
    .....
</mailingLists>
  1. subscribe, unsubscribe: 訂閱郵件(取消訂閱)的地址或鏈接颁独,如果是郵件地址,創(chuàng)建文檔時伪冰,鏈接會被自動創(chuàng)建誓酒;
  2. archive:瀏覽郵件信息的URL;
  3. post:接收郵件的地址;
  1. SCM:(Source Control Management)靠柑,該標(biāo)簽允許你配置你的代碼庫寨辩,供Maven Web站點和其他插件使用。
<scm>
    <connection>scm:svn:http://127.0.0.1/svn/my-project</connection>
    <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection>
    <tag>HEAD</tag>
    <url>http://127.0.0.1/websvn/my-project</url>
</scm>
  • connection, developerConnection:這兩個表示我們?nèi)绾芜B接到maven的版本庫歼冰。connection只提供讀靡狞,developerConnection將提供寫的請求;寫法如:scm:[provider]:[provider_specific]隔嫡,如果連接到CVS倉庫甸怕,可以配置如下:
    scm:cvs:pserver:127.0.0.1:/cvs/root:my-project
  • tag:項目標(biāo)簽,默認(rèn)HEAD
  • url:共有倉庫路徑
  1. prerequisites:項目構(gòu)建的前提腮恩。
<prerequisites>
    <maven>2.0.6</maven>
</prerequisites>
  1. repositories梢杭,pluginRepositories,依賴和擴展的遠(yuǎn)程倉庫列表秸滴;pom里面的倉庫與setting.xml里的倉庫功能是一樣的武契。主要的區(qū)別在于,pom里的倉庫是個性化的荡含。比如一家大公司里的setting文件是公用 的咒唆,所有項目都用一個setting文件,但各個子項目卻會引用不同的第三方庫释液,所以就需要在pom里設(shè)置自己需要的倉庫地址钧排。而pluginRepositories,與Repositories具有類似的結(jié)構(gòu)均澳,只是Repositories是dependencies的home恨溜,而這個是plugins 的home。
<repositories>
    <repository>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <id>codehausSnapshots</id>
      <name>Codehaus Snapshots</name>
      <url>http://snapshots.maven.codehaus.org/maven2</url>
      <layout>default</layout>
    </repository>
  </repositories>
  <pluginRepositories>
    ...
  </pluginRepositories>
  • releases找前,snapshots:這是各種構(gòu)件的策略糟袁,release或者snapshot,這兩個集合躺盛,POM就可以根據(jù)獨立倉庫任意類型的依賴改變策略项戴。如:一個人可能只激活下載snapshot用來開發(fā)。
  • enable:true或者false槽惫,決定倉庫是否對于各自的類型激活(release 或者 snapshot)周叮。
  • updatePolicy: 這個元素決定更新頻率。maven將比較本地pom的時間戳(存儲在倉庫的maven數(shù)據(jù)文件中)和遠(yuǎn)程的界斜。有以下選擇: always, daily (默認(rèn)), interval:X (x是代表分鐘的整型) 仿耽, never。
  • checksumPolicy:當(dāng)Maven向倉庫部署文件的時候各薇,它也部署了相應(yīng)的校驗和文件项贺【桑可選的為:ignore,fail开缎,warn棕叫,或者不正確的校驗和。
  • layout:在上面描述倉庫的時候奕删,提到他們有統(tǒng)一的布局俺泣。Maven 2有它倉庫默認(rèn)布局。然而完残,Maven 1.x有不同布局伏钠。使用這個元素來表明它是default還是legacy。
  1. profiles:POM 4.0的一個新特性是一個項目能夠根據(jù)所構(gòu)建的環(huán)境改變設(shè)置坏怪。通過profiles贝润,我們可以指定構(gòu)建的環(huán)境是開發(fā)绊茧,測試铝宵,UAT,生產(chǎn)等環(huán)境华畏;
<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <profiles>
    <profile>
      <id>test</id>
      <activation>...</activation>
      <build>...</build>
      <modules>...</modules>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <dependencies>...</dependencies>
      <reporting>...</reporting>
      <dependencyManagement>...</dependencyManagement>
      <distributionManagement>...</distributionManagement>
    </profile>
  </profiles>
</project>

我們可以通過activation標(biāo)簽來激活相應(yīng)的profile鹏秋,也就是指定要構(gòu)建的默認(rèn)的環(huán)境,并且可以配置各種需要的環(huán)境亡笑,并且激活profile的方式也有多種侣夷,具體參數(shù)可查看官網(wǎng)文檔。

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <profiles>
    <profile>
      <id>test</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk>
        <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>sparrow-type</name>
          <value>African</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      ...
    </profile>
  </profiles>
</project>

三仑乌、 總結(jié)

在上文中百拓,我們介紹了maven中pom文件的各種配置,其中還有一些沒有學(xué)習(xí)到晰甚,這些可以等我們有需要的時候再了解不遲衙传,如果要學(xué)習(xí),可以通過本文尾部的官網(wǎng)地址厕九。

參考資料:
maven之pom.xml配置文件詳解
Apache Maven Project - POM Reference
IBM開發(fā)者社區(qū)-用 Maven 做項目構(gòu)建

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蓖捶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扁远,更是在濱河造成了極大的恐慌俊鱼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畅买,死亡現(xiàn)場離奇詭異并闲,居然都是意外死亡,警方通過查閱死者的電腦和手機谷羞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門焙蚓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事购公∶染” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵宏浩,是天一觀的道長知残。 經(jīng)常有香客問我,道長比庄,這世上最難降的妖魔是什么求妹? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮佳窑,結(jié)果婚禮上制恍,老公的妹妹穿的比我還像新娘。我一直安慰自己神凑,他們只是感情好净神,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溉委,像睡著了一般鹃唯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓣喊,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天坡慌,我揣著相機與錄音,去河邊找鬼藻三。 笑死洪橘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼销斟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抡四?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤仗谆,失蹤者是張志新(化名)和其女友劉穎指巡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隶垮,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡藻雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狸吞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勉耀。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡指煎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出便斥,到底是詐尸還是另有隱情至壤,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布枢纠,位于F島的核電站像街,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晋渺。R本人自食惡果不足惜镰绎,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望木西。 院中可真熱鬧畴栖,春花似錦、人聲如沸八千。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叼丑。三九已至关翎,卻和暖如春扛门,著一層夾襖步出監(jiān)牢的瞬間鸠信,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工论寨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留星立,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓葬凳,卻偏偏與公主長得像绰垂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子火焰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容