海水正藍(lán)

          面朝大海,春暖花開(kāi)
          posts - 145, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          【轉(zhuǎn)】深入淺出maven

          Posted on 2012-07-02 13:28 小胡子 閱讀(213) 評(píng)論(0)  編輯  收藏
          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代碼:
          1. <profile>   
          2. 。  
          3.       <url>http://10.83.1.111:10080/nexus-webapp-1.9.1.1/content/groups/public/</url>   
          4.       <url>http://10.83.1.111::10080/nexus-webapp-1.9.1.1/content/groups/public/</url>   
          5. </profile>  
          代表老師的私服
          工程描述文件pom

          java代碼:
          1. <project xmlns="http://maven.apache.org/POM/4.0.0"  
          2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
          4. <modelVersion>4.0.0</modelVersion>  
          5. <groupId>cn.javass.study</groupId>  
          6. <artifactId>hello-world</artifactId>  
          7. <version>1.0-SNAPSHOT</version>  
          8. <name>Maven Quick Start Archetype</name>  
          9. <dependencies>  
          10. <dependency>  
          11. <groupId>junit</groupId>  
          12. <artifactId>junit</artifactId>  
          13. <version>3.7.1</version>  
          14. <scope>test</scope>  
          15. </dependency>  
          16. </dependencies>  
          17. </project>  
          常見(jiàn)的mvn命令

          java代碼:
          1. mvn clean test  
          2. mvn clean package  
          3. 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)視頻課程】 


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 古田县| 万全县| 永寿县| 平舆县| 盘山县| 巨鹿县| 乐至县| 芦山县| 故城县| 保亭| 绥滨县| 新邵县| 增城市| 鲜城| 河津市| 吉安市| 平度市| 辽阳县| 阿荣旗| 手游| 平安县| 南召县| 金堂县| 淳化县| 铜陵市| 元朗区| 泽普县| 开江县| 平潭县| 稷山县| 红安县| 虎林市| 连平县| 福建省| 云南省| 安达市| 常德市| 九龙城区| 阿鲁科尔沁旗| 四子王旗| 灵武市|