亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Maven2的新特性

系統 1628 0

?

現在許多的項目都在用maven做管理,學習一下,這是一篇比較基礎的文章。轉載于developseworks中國。

原文地址: http://www.ibm.com/developerworks/cn/opensource/os-maven2/


Maven2的新特性
級別: 初級
鍵 胡 ( jianhgreat@hotmail.com ), 西安交通大學碩士

偉紅 胡 ( huweih@cn.ibm.com ), 工程師,IBM 區域合作伙伴支持中心, IBM

2006 年? 2 月? 23 日

????? 本文主要闡述 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的功能,如,請參考 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的標準目錄結構如下:

Maven2的新特性

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

  • src/main/resources,負責管理項目主體的資源。在使用Maven2執行compile之后,這個目錄中的所有文件及子目錄,會復制到target/classes目錄中,為以后的打包提供了方便。
  • src/test/resources,負責管理項目測試的資源。在使用Maven2執行test-compile之后,這個目錄中的所有文件及子目錄,會復制到target/test-classes目錄中,為后續的測試做好了準備。

這些動作在 Maven1 中,是需要在 maven.xml中使用或來完成的。如今,完全不需要在pom.xml中指定就能夠自動完成。在src和test都使用resources,方便構建和測試,這種方式本就已是前人的經驗。通過使用Maven2,使這個經驗在開發團隊中得到普及。

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

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

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

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

    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中,中還引入了,它主要管理依賴的部署。目前可以使用5個值:

  • compile,缺省值,適用于所有階段,會隨著項目一起發布。
  • provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
  • runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。
  • test,只在測試時使用,用于編譯和運行測試代碼。不會隨項目發布。
  • system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。

<scope>的使用舉例:

    <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所依賴的包。

?

使用簡介

?

安裝Maven2的步驟非常簡單:首先從Maven官方網站下載相應的軟件包,目前是Maven 2.0.1;然后解壓,并設置環境變量M2_HOME= Maven2的解壓安裝目錄;最后將%M2_HOME%/bin添加到path中,方便Maven在任何目錄下運行。

?

Maven2的運行命令是mvn,使用mvn -h可以獲得相關的幫助信息。常用情形:

  • 創建Maven項目:mvn archetype:create
  • 編譯源代碼:mvn compile
  • 編譯測試代碼:mvn test-compile
  • 運行測試:mvn test
  • 產生site:mvn site
  • 打包:mvn package
  • 在本地Repository中安裝jar:mvn install
  • 清除產生的項目:mvn clean

或許是由于剛剛推出的緣故,Maven2目前還是有一些不盡如人意的地方。尤其是Report部分的plugin,有的是因為目前還沒有,如 junit-report。有的則是一些莫名其妙的問題,如checktyle和pmd,在本地locale下都無法正常工作。以pmd舉例,在產生 PMD報告時會拋出如下異常:

    java.util.MissingResourceException: Can't find bundle for base name pmd-report,locale zh_CN
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:839)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:808)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:702)
……

  

? 幸運的是,Maven2一出現就備受關注,要不了多長時間,諸如此類的問題應該就會很快解決。

?

結論

Maven2在Maven1的優勢基礎之上,又向前邁進了一大步。它提供的這些新特性大大地縮短了開發管理中的工作量,使得開發人員將精力集中在實際的業務問題上。而且這些新特性對于簡化使用,普及最佳實踐,也起到了積極的作用。

Maven2的新特性


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品国产自在久久出水 | 高清国产性色视频在线 | 一区二区三区www | 中国第一毛片 | 久青草国产视频 | 91精品乱码一区二区三区 | 欧美性猛交xxxx免费看手交 | 国产福利在线免费观看 | 伊人精品视频一区二区三区 | 99久久久免费精品免费 | 精品欧美高清一区二区免费 | 色精品一区二区三区 | chinese国产xxxx中国 | 欧美日韩一区二区视频免费看 | 精品亚洲一区二区 | 日韩字幕无线乱码 | 九九热在线精品视频 | 久久精品国产69国产精品亚洲 | 在线高清一级欧美精品 | 99精品国产免费久久国语 | 九九热思思 | 亚洲高清在线播放 | 久久精品影院一区二区三区 | 香蕉爱爱网 | 成人精品亚洲 | 一级片视频免费看 | 国产亚洲精品97在线观看 | 欧美国产成人在线 | 涩涩在线观看 | 亚洲不卡| 国产成人aa在线观看视频 | 国产一区二区三区免费看 | 日韩精品另类天天更新影院 | 国产亚洲美女精品久久久 | 国产成人精品区在线观看 | 欧美成人国产 | 手机看片国产欧美日韩高清 | 欧美jlzz18性欧美 | 久久久久欧美精品三级 | 久久最新免费视频 | 亚洲欧美18v中文字幕高清 |