maven是什么
maven這個(gè)詞可以翻譯為“知識(shí)的積累”,也可以翻譯為“專(zhuān)家”或“內(nèi)行”。作為apache組織中的一個(gè)頗為成功的開(kāi)源項(xiàng)目,maven主要服務(wù)于基于java平臺(tái)的項(xiàng)目構(gòu)建、依賴(lài)管理和項(xiàng)目信息管理。
maven能干什么
使項(xiàng)目構(gòu)建構(gòu)成更容易;
提供統(tǒng)一構(gòu)建系統(tǒng)(編譯、測(cè)試、持續(xù)整合...);
提供高質(zhì)量的項(xiàng)目信息(依賴(lài)、報(bào)告、site...);
提供開(kāi)發(fā)的最佳實(shí)踐指南;
能無(wú)縫的加入新的特性;
maven有什么【maven的核心概念】
項(xiàng)目對(duì)象模型(Project Object Model),
坐標(biāo)(Coordinates),
項(xiàng)目生命周期(ProjectLifecycle),
插件(plugin)和目標(biāo)(goal),
依賴(lài)管理系統(tǒng)(Dependency Management System),
倉(cāng)庫(kù)管理(Repositories)。

準(zhǔn)備我們需要的環(huán)境
下載maven的安裝包apache-maven-3.0.3-bin.tar.gz,解壓至任何目錄。
設(shè)置環(huán)境變量M2_HOME,設(shè)置為maven的安裝路徑;同時(shí)把maven的bin目錄增加至環(huán)境變量path里。【我們可以看到,跟java的安裝幾乎一模一樣】。
正常情況下,maven會(huì)到中央倉(cāng)庫(kù)去下載我們需要的構(gòu)件或者插件;但是,現(xiàn)在在教室不能上網(wǎng),所以需要將老師的私服加入到下載的配置中。建立 C:\Documents and Settings\Administrator\.m2文件夾,其中Administrator為當(dāng)前登錄的用戶(hù)。拷入準(zhǔn)備好的 settings.xml。其中
java代碼:
- <profile>
- 。
- <url>http://10.83.1.111:10080/nexus-webapp-1.9.1.1/content/groups/public/</url>
- <url>http://10.83.1.111::10080/nexus-webapp-1.9.1.1/content/groups/public/</url>
- </profile>
代表老師的私服

工程描述文件pom
java代碼:
- <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">
- <modelVersion>4.0.0</modelVersion>
- <groupId>cn.javass.study</groupId>
- <artifactId>hello-world</artifactId>
- <version>1.0-SNAPSHOT</version>
- <name>Maven Quick Start Archetype</name>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.7.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
常見(jiàn)的mvn命令
java代碼:
- mvn clean test
- mvn clean package
- mvn clean install
mvn是命令名
clean說(shuō)明要清空所有的配置文件
test說(shuō)明要運(yùn)行單元測(cè)試
package說(shuō)明要打包
install安裝到本地倉(cāng)庫(kù)
坐標(biāo)
Maven的世界中擁有數(shù)量非常巨大的構(gòu)件,也就是我們平時(shí)用的一些jar、war等文件。Maven定義了這樣一組規(guī)則:世界上任何一個(gè)構(gòu)件都可以使用 Maven坐標(biāo)唯一標(biāo)識(shí)。Maven坐標(biāo)的元素包括groupId、artifactId、version、packaging、classifier。
groupId:定義當(dāng)前Maven項(xiàng)目隸屬的實(shí)際項(xiàng)目。groupId的表示方式與java包名的表示方式類(lèi)似,通常與域名反向一一對(duì)應(yīng)。
artifactId:該元素定義實(shí)際項(xiàng)目中的一個(gè)Maven項(xiàng)目/模塊。
version:版本【可以分成穩(wěn)定版本和快照版本】。
packaging:打包方式。如:jar、war。
classifier:不能直接定義,用來(lái)表示構(gòu)件到底用于何種jdk版本。
pom
POM(Project Object Model):Maven的核心文件,位于每個(gè)工程的根目錄中,指示Maven如何工作的元數(shù)據(jù)文件,類(lèi)似于Ant中的build.xml文件。
依賴(lài)(Dependency)
為了能夠構(gòu)建或運(yùn)行,Java工程一般會(huì)依賴(lài)其它的包。在Maven中,這些被依賴(lài)的包就被稱(chēng)為dependency。dependency一般是其它工程的坐標(biāo)。
依賴(lài)具有傳遞性。
生命周期
項(xiàng)目的生命周期是指軟件開(kāi)發(fā)人員每天都在對(duì)項(xiàng)目進(jìn)行清理、編譯以及部署。雖然大家都在不停的做構(gòu)建工作,但公司和公司間、項(xiàng)目和項(xiàng)目間,往往使用不同的方式做類(lèi)似的工作。
Maven的生命周期就是為了所有的構(gòu)建過(guò)程進(jìn)行抽象和統(tǒng)一。這個(gè)生命周期包含了項(xiàng)目的清理、初始化、編譯、測(cè)試、打包、集成測(cè)試、驗(yàn)證、部署和站點(diǎn)生成等幾乎所有構(gòu)建步驟。
Maven擁有三套相互獨(dú)立的生命周期,他們分別為clean、default和site。clean生命周期的目的是清理項(xiàng)目,default生命周期的目的是構(gòu)建項(xiàng)目,而site生命周期的目的是建立項(xiàng)目站點(diǎn)。
階段【phase】
每個(gè)生命周期包含一些階段,這些階段是有順序的,并且后面的階段依賴(lài)于前面的階段,用戶(hù)和Maven最直接的交互方式就是調(diào)用這些生命周期階段。
較之于生命周期階段的前后依賴(lài)關(guān)系,三套生命周期本身是相互獨(dú)立的,用戶(hù)可以?xún)H僅調(diào)用clean生命周期的某個(gè)階段,或者僅僅調(diào)用default生命周期的某個(gè)階段,而不會(huì)對(duì)其他生命周期產(chǎn)生任何影響。
clean生命周期包含三個(gè)階段:
pre-clean、clean、post-clean
default生命周期包含很多階段:
site生命周期包含四個(gè)階段:
pre-site、site、post-site、site-deploy
插件及其目標(biāo)【goal】
Maven的核心僅僅定義了抽象的生命周期,具體的任務(wù)是交由插件完成的,插件以獨(dú)立的構(gòu)建形式存在。
對(duì)于插件本身,為了能夠復(fù)用代碼,它往往能夠完成多個(gè)任務(wù)。例如maven-dependency-plugin插件,能夠基于項(xiàng)目以來(lái)做很多事情。比 如,能夠分析項(xiàng)目依賴(lài),找到無(wú)用的或者重復(fù)的依賴(lài);還能夠列出項(xiàng)目的依賴(lài)樹(shù)。這些功能往往背后有很多可以復(fù)用的代碼,因此,可以把這些功能聚集在一個(gè)插件 里,每個(gè)功能就是一個(gè)插件目標(biāo)。
我們?cè)瓉?lái)僅僅學(xué)過(guò)通過(guò)前綴調(diào)用插件,現(xiàn)在可以用冒號(hào)來(lái)指定調(diào)用插件的某個(gè)具體目標(biāo)了,比如:mvn dependency:tree。冒號(hào)前面是插件的前綴,冒號(hào)后是該插件的目標(biāo)。
在Maven世界中,任何一個(gè)依賴(lài)、插件或者項(xiàng)目的構(gòu)建輸出,都可以稱(chēng)為構(gòu)件。任何一個(gè)構(gòu)件都有一組坐標(biāo)唯一標(biāo)識(shí)。
得益于坐標(biāo)機(jī)制,任何Maven項(xiàng)目使用任何一個(gè)構(gòu)件的方式都是完全相同的。在此基礎(chǔ)上,Maven可以在某個(gè)位置統(tǒng)一存儲(chǔ)所有Maven項(xiàng)目共享的構(gòu)件,這個(gè)統(tǒng)一的位置就是倉(cāng)庫(kù)。
對(duì)于Maven來(lái)說(shuō),倉(cāng)庫(kù)只分為兩大類(lèi):本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。當(dāng)Maven根據(jù)坐標(biāo)尋找構(gòu)件的時(shí)候,它首先會(huì)查看本地倉(cāng)庫(kù),如果本地倉(cāng)庫(kù)存在此構(gòu)件,則直 接使用;如果本地倉(cāng)庫(kù)部存在此構(gòu)件,Maven就會(huì)去遠(yuǎn)程倉(cāng)庫(kù)查找,發(fā)現(xiàn)需要的構(gòu)件之后,下載到本地倉(cāng)庫(kù)再使用。
【以上概念,對(duì)比一下hibernate中的一級(jí)緩存。】
私服是一種特殊的遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),私服代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù),供局域網(wǎng)內(nèi)的Maven用戶(hù)使用。

首先從 http://nexus.sonatype.org/downloads/下載最新版本的Nexus的war包形式版本。
登錄時(shí)其默認(rèn)的用戶(hù)名為admin,密碼為admin123。
使用nexus的時(shí)候,如果想支持搜索;可以從遠(yuǎn)程倉(cāng)庫(kù)下載其索引,這當(dāng)然非常慢,我們可以使用gui的方式在下載好的構(gòu)件基礎(chǔ)上重建索引。
exus支持非常全面的搜索方式。GAV搜索:通過(guò)GroupId、ArtifactId和Version進(jìn)行搜索;全類(lèi)名搜索;關(guān)鍵詞搜索。
配置客戶(hù)機(jī)使用nexus時(shí),需要在settings.xml文件中加入相應(yīng)的配置,從nexus的倉(cāng)庫(kù)組中下載構(gòu)件和插件。【在helloworld中已經(jīng)說(shuō)明,這里不再舉例】
WTP項(xiàng)目【也就是咱們的eclipse下的dynamic web project】
src/main/java:源碼目錄
src/main/resources:資源目錄(如存放log4j.properties)
src/main/webapp:web目錄【它下面就是WEB-INF】
src/test/java:測(cè)試源碼目錄
src/test/resources:測(cè)試資源目錄
target:編譯結(jié)果目錄
安裝插件
將獲得的m2eclipse.rar解壓到eclipse的dropins文件夾下,重啟eclipse,就可以看到maven插件了。
新建項(xiàng)目
選擇【New】->【Project】->【Maven Project】,選擇create a simple project,填入GAV,選擇打包方式j(luò)ar/war。
如果要新建web工程,請(qǐng)選擇打包方式為war,為了讓項(xiàng)目能在eclipse相關(guān)的tomcat下運(yùn)行,還需要一點(diǎn)點(diǎn)麻煩的配置。選擇項(xiàng)目的屬性,添加 dynamic web project支持【project facets】;再次選擇項(xiàng)目的屬性,重整項(xiàng)目的部署【deployment assembly】。這部分操作非常非常麻煩,請(qǐng)注意看老師的演示。
添加依賴(lài)
在項(xiàng)目上右擊【maven】->【add dependency】。
運(yùn)行命令行
在項(xiàng)目上右擊【Run as】。
視頻配套PPT,視頻地址【 獨(dú)家maven基礎(chǔ)實(shí)戰(zhàn)視頻課程】