一、概述
??當(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)簽定義了如下屬性:
xmlns
屬性:表明了該標(biāo)簽下元素的默認(rèn)命名空間是:http://maven.apache.org/POM/4.0.0,xml文件中覆享,定義命名空間的格式為:xmlns:namespace-prefix="namespaceURI"佳遂,而定義默認(rèn)命名空間的格式為:xmlns="namespaceURI";xmlns:xsi
屬性:定義了一個namespace-prefix撒顿,其代表的命名空間URI為:http://www.w3.org/2001/XMLSchema-instance丑罪,定義該命名空間主要是為了更方便的使用其所代表的命名空間中的schemaLocation屬性;其中凤壁,使用xsi作為namespace-prefix实胸,并不是硬性規(guī)定劳闹,只是一種通用的選擇,當(dāng)然也可以改成別的命名;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. 依賴配置
-
dependencies
:項目相關(guān)依賴,如果父項目中的依賴潮尝,會被子項目引用榕吼,所以一般在父項目中定義子項目中共有的依賴。并且如果有需要勉失,子項目可以修改所依賴包的版本:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
-
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:父項目的版本
-
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幾個重要的屬性介紹:
- type屬性催式,依賴的類型函喉,默認(rèn)為jar,指定pom荣月,可以定義整個pom文件管呵;
- scope屬性,當(dāng)前包的依賴范圍哺窄,用于限制依賴項的傳遞性撇寞,通過控制依賴的范圍,可以指定該依賴在什么階段有效堂氯。該屬性共有5個值蔑担,默認(rèn)是
compile
,也就是依賴關(guān)系在包含編譯咽白,測試啤握,運行的所有類路徑中都是可用的。而比如provided
晶框,則是依賴關(guān)系在編譯和測試階段的類路徑中是可用的排抬。如需查看全部,可參考:Introduction to the Dependency Mechanism -Dependency Scope- optional屬性授段,因為依賴是具有傳遞性的蹲蒲,例如 Project A 依賴于 Project B,B 依賴于 C侵贵,那么 B 對 C 的依賴關(guān)系也會傳遞給 A届搁,如果我們不需要這種傳遞性依賴,就可以通過設(shè)置該屬性的值窍育。默認(rèn)為false卡睦,即子項目默認(rèn)都繼承,true的話子項目必須顯示的引入漱抓,與dependencyManagement里定義的依賴類似表锻;
- 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>
-
modules
:Maven項目的一大特點就是以多模塊著稱骚腥,該標(biāo)簽就是用于指定當(dāng)前項目所包含的模塊敦间,對該模塊進行的Maven操作瓶逃,會讓所有子模塊也進行相應(yīng)的操作束铭;
<modules>
<module>com-a</>
<module>com-b</>
<module>com-c</>
<modules/>
-
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)建配置
- 所謂的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>
- 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)境配置
-
issueManagement
:用于缺陷系統(tǒng)的跟蹤與管理派阱,比如Bugzilla, Jira等管理工具:
<issueManagement>
<system>Bugzilla</system>
<url>http://127.0.0.1/bugzilla/</url>
</issueManagement>
-
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>
- system:持續(xù)集成系統(tǒng)的名字
- url:持續(xù)集成系統(tǒng)的URL
- notifiers:構(gòu)建完成時,需要通知的開發(fā)者/用戶的配置項斜纪。包括被通知者信息和通知條件(錯誤颁褂,失敗,成功傀广,警告)
- type:通知方式
- sendOnError:錯誤時是否通知
- sendOnFailure:失敗時是否通知
- sendOnSuccess:成功時是否通知
- sendOnWarning:警告時是否通知
- address:通知發(fā)送到的地址
- configuration:擴展項
-
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>
- subscribe, unsubscribe: 訂閱郵件(取消訂閱)的地址或鏈接颁独,如果是郵件地址,創(chuàng)建文檔時伪冰,鏈接會被自動創(chuàng)建誓酒;
- archive:瀏覽郵件信息的URL;
- post:接收郵件的地址;
-
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:共有倉庫路徑
-
prerequisites
:項目構(gòu)建的前提腮恩。
<prerequisites>
<maven>2.0.6</maven>
</prerequisites>
-
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。
-
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)建