最近在學(xué)習(xí)如何使用maven,做了一個(gè)demo(基于S2S整合),總結(jié)一下與大家分享,期待與大家討論以期快速進(jìn)步。
一、maven介紹
1、maven是什么
http://maven.apache.org/
官方解釋:Maven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System),和用來(lái)運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。
2、使用maven有什么好處,解決什么問(wèn)題
jar統(tǒng)一管理了:
如果建立了一個(gè)本地的jar倉(cāng)庫(kù),那么所有人都是從倉(cāng)庫(kù)里面下載jar,拷貝項(xiàng)目時(shí)只需要copy幾K的源碼即可!其次,依然是倉(cāng)庫(kù),使得每個(gè)人的jar版本都是一致的,不會(huì)出現(xiàn)因?yàn)榘姹静煌鸬哪涿畹腻e(cuò)誤。
項(xiàng)目的自動(dòng)化:
只需要mvn package命令,在eclipse里面,看run里面,只需要選擇就行了!它會(huì)自動(dòng)的從編譯,測(cè)試開(kāi)始,一直到打包,自動(dòng)的運(yùn)行,保證你的包沒(méi)有問(wèn)題。
我們?cè)谧龆鄠€(gè)不同的Java項(xiàng)目時(shí),每個(gè)項(xiàng)目所用到的庫(kù)文件基本都是大同小異的,通常的做法是每個(gè)項(xiàng)目下面都會(huì)復(fù)制一份這些庫(kù)文件,甚至?xí)堰@些庫(kù)文件都提交到vss上去,這樣帶來(lái)的問(wèn)題不僅是增大了項(xiàng)目占用的硬盤(pán)空間,而且也使包管理很混亂。
我們可以這樣查看jar包的依賴關(guān)系,是不是很爽?!
還可以單元測(cè)試覆蓋率報(bào)表:
2、helloword
1、下載Maven 附件中的maven3.jar 解壓到任意目錄
2、安裝eclipse插件m2eclipse
方式一:在線安裝 更新地址是:http://m2eclipse.sonatype.org/sites/m2e
方式二:本地安裝 help-->install new softeware-->add-->name填寫(xiě)maven-->archive..-->jar:file:/../m2e.zip!/-->ok
安裝完成重啟eclipse,在Window-->Preferences-->Maven下配置
禁用eclipse啟動(dòng)時(shí)更新maven index 主要是每次eclipse啟動(dòng)時(shí)都更新很煩人
添加自己的maven
3、新建maven項(xiàng)目
按照下圖步驟
- groupId定義了項(xiàng)目屬于哪個(gè)組,這個(gè)組往往和項(xiàng)目所在的組織或公司存在關(guān)聯(lián)。譬如在googlecode上建立了一個(gè)名為myapp的項(xiàng)目,那么groupId就應(yīng)該是com.googlecode.myapp.
- artifactId定義了當(dāng)前Maven項(xiàng)目在組中唯一的ID,groupId為com.googlecode.myapp的例子中,你可能會(huì)為不同的子項(xiàng)目(模塊)分配artifactId,如myapputil、myappdomain、myappweb等。
- version指定了項(xiàng)目當(dāng)前的版本——1.0SNAPSHOT。SNAPSHOT意為快照,說(shuō)明該項(xiàng)目還處于開(kāi)發(fā)中,是不穩(wěn)定的版本。隨著項(xiàng)目的發(fā)展,version會(huì)不斷更新,如升級(jí)為1.0、1.1SNAPSHOT、1.1、2.0等。
- name元素聲明了一個(gè)對(duì)于用戶更為友好的項(xiàng)目名稱
點(diǎn)擊Finish完成
4、maven項(xiàng)目結(jié)構(gòu)
下圖為基于maven項(xiàng)目結(jié)構(gòu),這里跟我們以前的項(xiàng)目結(jié)構(gòu)很不一樣,以前的項(xiàng)目結(jié)構(gòu)約定俗成的只有兩塊 一個(gè)src 一個(gè)webRoot,當(dāng)然這些都可以隨意配置,比如WebRoot有的叫WebContent

這里maven倡導(dǎo)約定優(yōu)于配置,maven的約定就是以下目錄結(jié)構(gòu)
src/main/java 下存放java類(lèi)
src/main/webapp 下存放頁(yè)面文件(需要手動(dòng)創(chuàng)建)
src/main/resources 下存放資源文件
src/test/java 下存放單元測(cè)試代碼
src/test/resources 下存放測(cè)試資源文件
5、添加jar包
只需維護(hù)pom.xml
比如添加struts2-core
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.0.11.2</version>
</dependency>
我在172.20.66.230上部署了一個(gè)maven倉(cāng)庫(kù),訪問(wèn)地址http://172.20.66.230:8081/nexus/
maven會(huì)根據(jù)pom.xml中的配置訪問(wèn)230的倉(cāng)庫(kù)下載對(duì)應(yīng)的jar source 以及doc,下載到哪?這要看maven3/conf/settings.xml 55:
<localRepository>F:/Maven3/repository</localRepository>
6、編寫(xiě)代碼
附件中有一個(gè)struts2+spring 的demo,解壓然后import eclipse
在項(xiàng)目名上右鍵 run as -->Run Configurations
按圖配置,點(diǎn)擊Run即可。瀏覽器中訪問(wèn)http://localhost:8080/MavenSSH/
Maven運(yùn)行的生命周期
-
復(fù)制src/main/resources資源文件到輸出目錄
-
編譯src/main/java下的源代碼
-
復(fù)制src/test/resources下的測(cè)試用資源文件到測(cè)試輸出目錄
-
編譯src/test/java下的測(cè)試用例
-
運(yùn)行測(cè)試用例
-
打包生成
===========================
-
以上是一個(gè)簡(jiǎn)單的例子,只是用它獲取依賴的jar包 。maven還有很多諸如項(xiàng)目管理方面的功能,比如文檔編制、發(fā)布管理、配置管理...
-
第一個(gè)次運(yùn)行項(xiàng)目會(huì)比較慢,因?yàn)橐螺djar包。
-
MavenSSH.rar是一個(gè)struts2與spring集成的例子,頁(yè)面用到了sitemesh div+css 也值得學(xué)習(xí)
-
項(xiàng)目debug是運(yùn)行在jetty(類(lèi)似于tomcat的容器)中。