Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(19)

          隨筆分類(107)

          隨筆檔案(141)

          文章分類(284)

          文章檔案(342)

          相冊

          收藏夾(58)

          家裝

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

           
          本文主要闡述 Maven2 的新特性,這些新特性可以大大地縮短了開發管理中的工作量,使得開發人員將精力集中在實際的業務問題上。
          Maven 出現到現在也有很長時間了,初識它的感覺至今仍清晰的印在腦海中。現在想來,當時從 Ant 移情 Maven 的想法其實很樸素,就是因為 Maven 可以以網站的形式展現與項目相關的信息,如開發人員列表、各種 Report。這種方式為項目的構建帶來了極大的方便,尤其是 Report 的。試想對于產生的 Junit-Report、JavaDoc、CheckStyle、PMD 等報告,如果沒有一個統一的入口,每次切換目錄是多么令人厭煩的事情!

          Maven 無疑是相當成功的,這一點從越來越多的開源項目開始使用 Maven 就可以看出。Maven 取得成功的原因很簡單:在簡化構建腳本的同時,功能并沒有縮水,反而有所增強;提供匯集項目信息的工具,并以相當友好的方式呈現;豐富的插件簡化了工作。如此有力的工具出現,自然是爭相使用。

          新特性

          如今 Maven2 已經推出,Maven 的官方網站稱,Maven2 相對于 Maven1 是一個相當大的轉變,甚至不惜犧牲兼容性來達到這一目的。(為了 Maven1 的用戶著想,Maven1 仍在繼續他的使命。)如此大的變動到底換來了什么樣的結果?

          1. 更快、更簡單

          比起 Maven1 那不急不慢的運行速度,Maven2在速度上有了質的飛躍,甚至與Ant相比也毫不遜色(當然,下載不算)。除此之外,"簡化工作,使用業界公認的最佳實踐"也是是 Maven2 的另一大主題,其他的新特性無處不在體現 Maven2 為簡化工作而做出的努力。

          2. 更少的配置文件

          Maven1 和 Maven2 主要配置文件的對比:

          Maven1:project.xml、maven.xml、project.properties和build.properties。
          Maven2:pom.xml和settings.xml。
          POM是Maven的核心對象模型,在Maven2中POM已由project.xml轉移到pom.xml中使用,版本也由3升級為4。對于項目,一般只需要pom.xml就行了。

          在Maven2中不需要也不提倡使用maven.xml,原因如下:

          plugin的易用性的增強。
          散布于maven.xml中的內容難以在不同項目間共享,也不利于維護。在Maven2中建議使用自定義的plugin來封裝這些內容。
          如果仍期望能夠使用類似maven.xml的功能,如<preGoal>,請參考Inserting non-standard build steps using preGoals and postGoals。

          在Maven2中,配置使用settings.xml,它取代了原有的project.properties和build.properties。配置在Maven2中存在兩種級別:

          用戶級,針對操作系統登錄用戶而言。一般在$home/.m2/,對于windows用戶,就是目錄:C:\Documents and Settings\用戶名\.m2\settings.xml。
          全局級:一般在%M2_HOME%/conf/settings.xml,M2_HOME是Maven2的根目錄環境變量名。
          在settings.xml中可以配置,如本地Repository、proxy等等,關于settings.xml的結構可以從Maven的官方網站上獲取。

          3. Plugin語言更換

          在Maven2中,編寫plugin的語言由jelly變更為Java和BeanShell。Java在速度上更有優勢,而且開發人員的熟悉程度更高。對于其他的流行腳本,如groovy,Maven的官方網站的意見是,等待其更成熟時再考慮


          4. 提供預定義的目錄模板

          好的目錄結構可以使開發人員更容易理解項目,為以后的維護工作也打下良好的基礎。Maven2根據業界公認的最佳目錄結構,為開發者提供了缺省的標準目錄模板。Maven2的標準目錄結構如下:
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          項目根/ 
                      pom.xml
                      src/ 
                      main/                    項目主體目錄
                      java                  源代碼目錄
                      resources         所需 資源目錄
                      fileters             資源過濾文件目錄
                      assembly
                      config              配置文件目錄
                      test/ 
                      main/ 
                      java
                      resources
                      fileters
                      site                            與site相關的資源文件
                      target/                        輸出目錄
                      classes                   項目主題輸出目錄
                      test-classes             測試輸出目錄
                      site                        項木site輸出目錄
                      




          使用目錄模板,可以使pom.xml更簡潔。因為Maven2已經根據缺省目錄,預定義了相關的動作,而無需人工的干預。以resources目錄為例:

          src/main/resources,負責管理項目主體的資源。在使用Maven2執行compile之后,這個目錄中的所有文件及子目錄,會復制到target/classes目錄中,為以后的打包提供了方便。
          src/test/resources,負責管理項目測試的資源。在使用Maven2執行test-compile之后,這個目錄中的所有文件及子目錄,會復制到target/test-classes目錄中,為后續的測試做好了準備。
          這些動作在 Maven1 中,是需要在 maven.xml 中使用<preGoal>或<postGoal>來完成的。如今,完全不需要在pom.xml中指定就能夠自動完成。在src和 test都使用resources,方便構建和測試,這種方式本就已是前人的經驗。通過使用Maven2,使這個經驗在開發團隊中得到普及。

          創建標準目錄模板,可以通過如下命令:

          1
          mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons
                      




          groupId和artifactId的含義與Maven1中的含義一樣,參數artifactId的值會作為項目根目錄的名字。除了建立相應的目錄之外,Maven2還會創建缺省的pom.xml。

          Maven2也考慮到:不同類型的項目需要擁有不同的目錄結構。如創建web項目,可以使用命令:

          1
          2
          3
          4
          mvn archetype:create -DgroupId=com.mycompany.app
                      -DartifactId=my-webapp
                      -DarchetypeArtifactId=maven-archetype-webapp
                      



          5. 生命周期的引入

          在Maven2中有了明確的生命周期概念,而且都提供與之對應的命令,使得項目構建更加清晰明了。主要的生命周期階段:

          validate,驗證工程是否正確,所有需要的資源是否可用。
          compile,編譯項目的源代碼。
          test-compile,編譯項目測試代碼。
          test,使用已編譯的測試代碼,測試已編譯的源代碼。
          package,已發布的格式,如jar,將已編譯的源代碼打包。
          integration-test,在集成測試可以運行的環境中處理和發布包。
          verify,運行任何檢查,驗證包是否有效且達到質量標準。
          install,把包安裝在本地的repository中,可以被其他工程作為依賴來使用
          deploy,在整合或者發布環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。
          generate-sources,產生應用需要的任何額外的源代碼,如xdoclet。
          如果要執行項目編譯,那么直接輸入:mvn compile即可,對于其他的階段可以類推。階段之間是存在依賴關系(dependency)的,如test依賴test-compile。在執行 mvn test時,會先運行mvn test-compile,然后才是mvn test。

          6. 新增Dependency Scope

          在POM 4中,<dependency>中還引入了<scope>,它主要管理依賴的部署。目前<scope>可以使用5個值:

          compile,缺省值,適用于所有階段,會隨著項目一起發布。
          provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
          runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。
          test,只在測試時使用,用于編譯和運行測試代碼。不會隨項目發布。
          system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。
          <scope>的使用舉例:
          1
          2
          3
          4
          5
          6
          7
          8
          <dependency>
                      <groupId>hibernate</groupId>
                      <artifactId>hibernate</artifactId>
                      <version>3.0.3</version>
                      <scope>test</scope>
                      </dependency>
                      


          7. 傳遞依賴,簡化依賴管理

          在Maven1中,需要把依賴所需要的包也一并列出。這對于使用類似如Hibernate的用戶來說所操的心太多了,而且也不方便。在Maven2中實現了傳遞依賴,如此對于Hibernate所依賴的包,Maven2會自動下載,開發人員只需關心Hibernate即可。

          注意:只有得到Maven支持的依賴,通常是plugin形式出現,才能獲得這個特性。而且對于一些老的plugin,可能由于時間的關系不支持傳遞依賴。如至少在Maven 2.0.1中,對于Hibernate 2.1.2,仍然需要顯式列出Hibernate 2.1.2所依賴的包。
          [/img]

          平均得分
          (0 次評分)





          文章來自: developerworks
          posted on 2008-03-15 13:53 禮物 閱讀(383) 評論(0)  編輯  收藏 所屬分類: maven2
          主站蜘蛛池模板: 墨竹工卡县| 申扎县| 舞钢市| 酒泉市| 和龙市| 丽水市| 河北省| 千阳县| 白沙| 东山县| 中江县| 东丰县| 嵊州市| 金门县| 镇雄县| 定西市| 额尔古纳市| 阜阳市| 聊城市| 砀山县| 余姚市| 家居| 手游| 雅安市| 鄱阳县| 徐汇区| 沙河市| 沙洋县| 克东县| 安龙县| 新密市| 陇南市| 襄樊市| 渭源县| 西青区| 锡林浩特市| 清丰县| 罗甸县| 察哈| 香港| 和平区|