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

準備我們需要的環境
下載maven的安裝包apache-maven-3.0.3-bin.tar.gz,解壓至任何目錄。
設置環境變量M2_HOME,設置為maven的安裝路徑;同時把maven的bin目錄增加至環境變量path里。【我們可以看到,跟java的安裝幾乎一模一樣】。
正常情況下,maven會到中央倉庫去下載我們需要的構件或者插件;但是,現在在教室不能上網,所以需要將老師的私服加入到下載的配置中。建立 C:\Documents and Settings\Administrator\.m2文件夾,其中Administrator為當前登錄的用戶。拷入準備好的 settings.xml。其中
代表老師的私服

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

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