天天看點

Maven實戰. 3.1編寫POM

<b>3.1編寫pom</b>

就像make的makefile、ant的build.xml一樣,maven項目的核心是pom.xml。pom(project object model,項目對象模型)定義了項目的基本資訊,用于描述項目如何建構,聲明項目依賴,等等。現在先為hello world項目編寫一個最簡單的pom.xml。

首先建立一個名為helloworld的檔案夾,打開該檔案夾,建立一個名為pom.xml的檔案,輸入其内容,如代碼清單3-1所示。代碼清單3-1hello world的pom

&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;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/mavenv4_0_0.xsd"&gt;

&lt;modelversion&gt;4.0.0&lt;/modelversion&gt;

&lt;groupid&gt;com.juvenxu.mvnbook&lt;/groupid&gt;

&lt;artifactid&gt;helloworld&lt;/artifactid&gt;

&lt;version&gt;1.0snapshot&lt;/version&gt;

&lt;name&gt;maven hello world

project&lt;/name&gt;

&lt;/project&gt;

代碼的第一行是xml頭,指定了該xml文檔的版本和編碼方式。緊接着是project元素,project是所有pom.xml的根元素,它還聲明了一些pom相關的命名空間及xsd元素,雖然這些屬性不是必須的,但使用這些屬性能夠讓第三方工具(如ide中的xml編輯器)幫助我們快速編輯pom。

根元素下的第一個子元素modelversion指定了目前pom模型的版本,對于maven 2及maven 3來說,它隻能是4.0.0。

這段代碼中最重要的是包含groupid、artifactid和version的三行。這三個元素定義了一個項目基本的坐标,在maven的世界,任何的jar、pom或者war都是以基于這些基本的坐标進行區分的。

groupid定義了項目屬于哪個組,這個組往往和項目所在的組織或公司存在關聯。譬如在googlecode上建立了一個名為myapp的項目,那麼groupid就應該是com.googlecode.myapp,如果你的公司是mycom,有一個項目為myapp,那麼groupid就應該是com.mycom.myapp。本書中所有的代碼都基于groupid

com.juvenxu.mvnbook。

artifactid定義了目前maven項目在組中唯一的id,我們為這個hello world項目定義artifactid為helloworld,本書其他章節代碼會配置設定其他的artifactid。而在前面的groupid為com.googlecode.myapp的例子中,你可能會為不同的子項目(子產品)配置設定artifactid,如myapputil、myappdomain、myappweb等。

顧名思義,version指定了hello world項目目前的版本——1.0snapshot。snapshot意為快照,說明該項目還處于開發中,是不穩定的版本。随着項目的發展,version會不斷更新,如更新為1.0、1.1snapshot、1.1、2.0等。6.5節會詳細介紹snapshot,第13章會介紹如何使用maven管理項目版本的更新釋出。

最後一個name元素聲明了一個對于使用者更為友好的項目名稱,雖然這不是必須的,但還是推薦為每個pom聲明name,以友善資訊交流。

沒有任何實際的java代碼,我們就能夠定義一個maven項目的pom,這展現了maven的一大優點,它能讓項目對象模型最大程度地與實際代碼相獨立,我們可以稱之為解耦,或者正交性。這在很大程度上避免了java代碼和pom代碼的互相影響。比如當項目需要更新版本時,隻需要修改pom,而不需要更改java代碼;而在pom穩定之後,日常的java代碼開發工作基本不涉及pom的修改。