海水正藍

          面朝大海,春暖花開
          posts - 145, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          【轉】深入淺出maven

          Posted on 2012-07-02 13:28 小胡子 閱讀(212) 評論(0)  編輯  收藏
          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。其中

          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>  
          常見的mvn命令

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 高阳县| 扎鲁特旗| 宜昌市| 通辽市| 盘锦市| 祁门县| 齐齐哈尔市| 壤塘县| 红河县| 夏津县| 永州市| 宣城市| 虹口区| 恩施市| 宜春市| 星座| 安庆市| 青龙| 巫山县| 林州市| 泌阳县| 神木县| 宁南县| 新绛县| 光泽县| 淮南市| 西宁市| 德江县| 内丘县| 正蓝旗| 天气| 太康县| 汽车| 托克托县| 阜康市| 社旗县| 囊谦县| 海伦市| 叙永县| 云霄县| 瑞丽市|