Maven項(xiàng)目對(duì)象模型(POM),可以通過一小段描述信息來管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的項(xiàng)目管理工具軟件。
Maven除了以程序構(gòu)建能力為特色之外,還提供高級(jí)項(xiàng)目管理工具。由于Maven的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行Maven構(gòu)建腳本就可以構(gòu)建簡單的項(xiàng)目。由于Maven的面向項(xiàng)目的方法,許多apache Jakarta項(xiàng)目發(fā)文時(shí)使用Maven,而且公司項(xiàng)目采用Maven的比例在持續(xù)增長。
Maven這個(gè)單詞來自于依地語(猶太語),意為知識(shí)的積累,最初在Jakata Turbine項(xiàng)目中用來簡化構(gòu)建過程。當(dāng)時(shí)有一些項(xiàng)目(有各自Ant build文件),僅有細(xì)微的差別,而JAR文件都由CVS來維護(hù)。于是希望有一種標(biāo)準(zhǔn)化的方式構(gòu)建項(xiàng)目,一個(gè)清晰的方式定義項(xiàng)目的組成,一個(gè)容易的方式發(fā)布項(xiàng)目的信息,以及一種簡單的方式在多個(gè)項(xiàng)目中共享JARs。
特點(diǎn)
那么,Maven和Ant有什么不同呢?在回答這個(gè)問題以前,首先要強(qiáng)調(diào)一點(diǎn):Maven和Ant針對(duì)構(gòu)建問題的兩個(gè)不同方面。Ant為Java技術(shù)開發(fā)項(xiàng)目提供跨平臺(tái)構(gòu)建任務(wù)。Maven本身描述項(xiàng)目的高級(jí)方面,它從Ant借用了絕大多數(shù)構(gòu)建任務(wù)。因此,由于Maven和Ant代表兩個(gè)差異很大的工具,所以接下來只說明這兩個(gè)工具的等同組件之間的區(qū)別,如表1所示。
Maven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型(Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency 管理學(xué) System),和用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。當(dāng)你使用Maven的時(shí)候,你用一個(gè)明確定義的項(xiàng)目對(duì)象模型來描述你的項(xiàng)目,然后Maven可以應(yīng)用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。
Maven有一個(gè)生命周期,當(dāng)你運(yùn)行mvn install的時(shí)候被調(diào)用。這條命令告訴Maven執(zhí)行一系列的有序的步驟,直到到達(dá)你指定的生命周期。遍歷生命周期旅途中的一個(gè)影響就是,Maven運(yùn)行了許多默認(rèn)的插件目標(biāo),這些目標(biāo)完成了像編譯和創(chuàng)建一個(gè)JAR文件這樣的工作。
此外,Maven能夠很方便的幫你管理項(xiàng)目報(bào)告,生成站點(diǎn),管理JAR文件,等等。
常用命令
mvn archetype:generate創(chuàng)建Maven項(xiàng)目
mvn compile編譯源代碼
mvn deploy發(fā)布項(xiàng)目
mvn test-compile編譯測試源代碼
mvn test運(yùn)行應(yīng)用程序中的單元測試
mvn site生成項(xiàng)目相關(guān)信息的網(wǎng)站
mvn Clean清除項(xiàng)目目錄中的生成結(jié)果
mvn package根據(jù)項(xiàng)目生成的jar
mvn install在本地Repository中安裝jar
mvn eclipse:eclipse生成eclipse項(xiàng)目文件
mvnjetty:run啟動(dòng)jetty服務(wù)
mvntomcat:run啟動(dòng)tomcat服務(wù)
mvn clean package-Dmaven.test.skip=true:清除以前的包后重新打包,跳過測試類
推薦書籍
發(fā)文時(shí)中文版對(duì)maven介紹比較全的書籍是《Maven實(shí)戰(zhàn)》
Win7配置
首先要安裝Jdk1.6和Myeclipse7.5。
1.Maven有一個(gè)重要的文件"settings.XML“,這個(gè)文件來源于apache-maven-2.0.8/conf/下,要放在window下,Win7和Windows XP還是有點(diǎn)不一樣,Win7---C:\Users\用戶名\.m2,Winxp---C:\Documents and Settings\用戶名\.m2。
2.設(shè)置Maven的環(huán)境變量,基本上和設(shè)置JDK環(huán)境變量相似,首先設(shè)置MAVEN_HOME,再加入Path。
3.修改”settings.XML”文件,在這個(gè)文件中找到
4.Myeclipse7.5及以上版本本身自帶Maven插件。如果使用低版本的MyEclipse需要安裝插件,在help菜單中選擇軟件 updates,選擇find and install,選擇search for new features to install-選擇new remote site。寫入name:maven URL:http://m2eclipse.codehaus.org/update/去下載相關(guān)jar包和插件。
5.在Myeclipse中windows-perferences中,在下圖的位置上,查看users settings的路徑是否正確。
6.建立Maven的project,F(xiàn)ile--new—other—Java Maven Project。
7.然后打開project里pom.XML文件,
在這xml文件中添加Maven所依賴的Jar的名稱,也就是添加
例如:添加大家常用的Struts Jar包
8.到發(fā)文時(shí)為止,環(huán)境就算搞定了。接下來要應(yīng)用Maven來打包Project為大家服務(wù)的。
在運(yùn)行指令中的命令:
a.mvn eclipse:Clean清除Project中以前的編譯的東西,重新再來
b.mvn eclipse:eclipse開始編譯Maven的Project
在MyEclipse中的操作:
a.選中Maven Project右擊在Run As中選擇Maven clean
b.在Myeclipse中,Project—Clean開始編譯
c.選中Maven Project 右擊在Run As中選擇Maven install
執(zhí)行完這幾步,如果沒發(fā)生異常,會(huì)在project里生成一個(gè)target文件夾,這個(gè)文件夾里的東西,就是Maven打包發(fā)布的東西。
生命周期
Maven的生命周期是為了對(duì)所有的構(gòu)建過程進(jìn)行了抽象了,便于統(tǒng)一。
Clean(清理)
cleanup(清理所有)
此生命周期旨在給工程做清理工作,它主要包含以下階段:
pre-clean-執(zhí)行項(xiàng)目清理前所需要的工作。
clean-清理上一次build項(xiàng)目生成的文件。
post-clean-執(zhí)行完成項(xiàng)目清理所需的工作.
default(默認(rèn))
validate-驗(yàn)證項(xiàng)目是否正確且所有必要的信息都可用。
initialize-初始化構(gòu)建工作,如:設(shè)置參數(shù),創(chuàng)建目錄等。
generate-sources-為包含在編譯范圍內(nèi)的代碼生成源代碼.
process-sources-處理源代碼,如過濾值.
generate-resources-
process-resources-復(fù)制并處理資源文件,至目標(biāo)目錄,準(zhǔn)備打包。
compile-編譯項(xiàng)目中的源代碼.
process-classes-為編譯生成的文件做后期工作,例如做Java類的字節(jié)碼增強(qiáng).
generate-test-sources-為編譯內(nèi)容生成測試源代碼.
process-test-sources-處理測試源代碼。
generate-test-resources-
process-test-resources-復(fù)制并處理資源文件,至目標(biāo)測試目錄。
test-compile-將需測試源代碼編譯到路徑。一般來說,是編譯/src/test/java目錄下的java文件至目標(biāo)輸出的測試CLASSPATH目錄中。
process-test-classes-
test-使用合適的單元測試框架運(yùn)行測試。這些測試代碼不會(huì)被打包或部署。
prepare-package-
package-接受編譯好的代碼,打包成可發(fā)布的格式,如JAR。
pre-integration-test-
integration-test-按需求將發(fā)布包部署到運(yùn)行環(huán)境。
post-integration-test-
verify-
install-將包安裝到本地倉庫,給其他本地引用提供依賴。
deploy-完成集成和發(fā)布工作,將最終包復(fù)制到遠(yuǎn)程倉庫以便分享給其他開發(fā)人員。
site(站點(diǎn))
pre-site-執(zhí)行一些生成項(xiàng)目站點(diǎn)前的準(zhǔn)備工作。
site-生成項(xiàng)目站點(diǎn)的文檔。
post-site-執(zhí)行需完成站點(diǎn)生成的工作,如站點(diǎn)部署的準(zhǔn)備工作。
site-deploy-向制定的web服務(wù)器部署站點(diǎn)生成文件。
Maven生命周期參考:Apache Maven Project,書籍《Maven In Action》
參考資料 >
Maven生命周期詳解.juvenshun.2013-01-11