maven 使用入門編寫pom 文件
我們利用ecilpse 創(chuàng)建1個(gè)簡(jiǎn)單的maven項(xiàng)目 來(lái)看看他的pom文件就像Make的Makefile、Ant的build.xml一樣,Maven項(xiàng)目的核心是pom.xml。POM(Project Object Model,項(xiàng)目對(duì)象模型)定義了項(xiàng)目的基本信息,用于描述項(xiàng)目如何構(gòu)建,聲明項(xiàng)目依賴,等等。現(xiàn)在先為Hello World項(xiàng)目編寫一個(gè)最簡(jiǎn)單的pom.xml。
首先創(chuàng)建一個(gè)名為helloworld的文件夾,打開該文件夾,新建一個(gè)名為pom.xml的文件,輸入其內(nèi)容,如代碼清單3-1所示。
代碼清單3-1 Hello World的POM
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
- http://maven.apache.org/mavenv4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.juvenxu.mvnbook</groupId>
- <artifactId>helloworld</artifactId>
- <version>1.0SNAPSHOT</version>
- <name>Maven Hello World Project</name>
- </project>
代碼的第一行是XML頭,指定了該xml文檔的版本和編碼方式。緊接著是project元素,project是所有pom.xml的根元素,它還聲明了一些POM相關(guān)的命名空間及xsd元素,雖然這些屬性不是必須的,但使用這些屬性能夠讓第三方工具(如IDE中的XML編輯器)幫助我們快速編輯POM。
根元素下的第一個(gè)子元素modelVersion指定了當(dāng)前POM模型的版本,對(duì)于Maven 2及Maven 3來(lái)說(shuō),它只能是4.0.0。
這段代碼中最重要的是包含groupId、artifactId和version的三行。這三個(gè)元素定義了一個(gè)項(xiàng)目基本的坐標(biāo),在Maven的世界,任何的jar、pom或者war都是以基于這些基本的坐標(biāo)進(jìn)行區(qū)分的。
groupId定義了項(xiàng)目屬于哪個(gè)組,這個(gè)組往往和項(xiàng)目所在的組織或公司存在關(guān)聯(lián)。譬如在googlecode上建立了一個(gè)名為myapp的項(xiàng)目,那么groupId就應(yīng)該是com.googlecode.myapp,如果你的公司是mycom,有一個(gè)項(xiàng)目為myapp,那么groupId就應(yīng)該是com.mycom.myapp。本書中所有的代碼都基于groupId com.juvenxu.mvnbook。
artifactId定義了當(dāng)前Maven項(xiàng)目在組中唯一的ID,我們?yōu)檫@個(gè)Hello World項(xiàng)目定義artifactId為helloworld,本書其他章節(jié)代碼會(huì)分配其他的artifactId。而在前面的groupId為com.googlecode.myapp的例子中,你可能會(huì)為不同的子項(xiàng)目(模塊)分配artifactId,如myapputil、myappdomain、myappweb等。
顧名思義,version指定了Hello World項(xiàng)目當(dāng)前的版本——1.0SNAPSHOT。SNAPSHOT意為快照,說(shuō)明該項(xiàng)目還處于開發(fā)中,是不穩(wěn)定的版本。隨著項(xiàng)目的發(fā)展,version會(huì)不斷更新,如升級(jí)為1.0、1.1SNAPSHOT、1.1、2.0等。6.5節(jié)會(huì)詳細(xì)介紹SNAPSHOT,第13章會(huì)介紹如何使用Maven管理項(xiàng)目版本的升級(jí)發(fā)布。
最后一個(gè)name元素聲明了一個(gè)對(duì)于用戶更為友好的項(xiàng)目名稱,雖然這不是必須的,但還是推薦為每個(gè)POM聲明name,以方便信息交流。
沒有任何實(shí)際的Java代碼,我們就能夠定義一個(gè)Maven項(xiàng)目的POM,這體現(xiàn)了Maven的一大優(yōu)點(diǎn),它能讓項(xiàng)目對(duì)象模型最大程度地與實(shí)際代碼相獨(dú)立,我們可以稱之為解耦,或者正交性。這在很大程度上避免了Java代碼和POM代碼的相互影響。比如當(dāng)項(xiàng)目需要升級(jí)版本時(shí),只需要修改POM,而不需要更改Java代碼;而在POM穩(wěn)定之后,日常的Java代碼開發(fā)工作基本不涉及POM的修改。
posted on 2014-03-05 11:48 順其自然EVO 閱讀(5025) 評(píng)論(1) 編輯 收藏 所屬分類: maven