<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    用Maven做項(xiàng)目管理

    在程序員發(fā)表的一篇maven文章,跟大家共享。
    Maven 做項(xiàng)目管理

    Java世界中我們很多的開發(fā)人員選擇用 Ant來(lái)構(gòu)建項(xiàng)目,一個(gè) build.xml能夠完成編譯、測(cè)試、打包、部署等很多任務(wù),但我們也碰到了很多的問題,如 jar文件管理混亂,各個(gè)項(xiàng)目結(jié)構(gòu)和 build.xml相差很大等等。而 Maven的出現(xiàn),給項(xiàng)目提供了更多的支持。

    1??????? 簡(jiǎn)介

    Maven 作為 Apache 的一個(gè)開源項(xiàng)目,旨在給項(xiàng)目管理提供更多的支持,主頁(yè)地址為 http://maven.apache.org 。它最早的意圖只是為了給 apache 組織的幾個(gè)項(xiàng)目提供統(tǒng)一的開發(fā)、測(cè)試、打包和部署,能讓開發(fā)者在多個(gè)項(xiàng)目中方便的切換。很多偉大的事業(yè),出發(fā)點(diǎn)都很簡(jiǎn)單, ebay 就是很好的例證。而 maven 的成功又一次驗(yàn)證了這一點(diǎn),越來(lái)越多的項(xiàng)目開始使用 maven

    基本原理

    Maven 的基本原理很簡(jiǎn)單,采用遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)以及一個(gè)類似 build.xml pom.xml ,將 pom.xml 中定義的 jar 文件從遠(yuǎn)程倉(cāng)庫(kù)下載到本地倉(cāng)庫(kù),各個(gè)應(yīng)用使用同一個(gè)本地倉(cāng)庫(kù)的 jar ,同一個(gè)版本的 jar 只需下載一次,而且避免每個(gè)應(yīng)用都去拷貝 jar 。如圖 1 。同時(shí)它采用了現(xiàn)在流行的插件體系架構(gòu),只保留最小的核心,其余功能都通過(guò)插件的形式提供,所以 maven 下載很小( 1.1M ),在執(zhí)行 maven 任務(wù)時(shí),才會(huì)自動(dòng)下載需要的插件。

    這個(gè)基本原理與 Pear ――PHP擴(kuò)展與應(yīng)用庫(kù)( the PHP Extension and Application Repository )的原理非常相似,都有一個(gè)官方的倉(cāng)庫(kù),都是微內(nèi)核,通過(guò)網(wǎng)絡(luò)將需要的文件下載到本地,通過(guò)官方倉(cāng)庫(kù)將相應(yīng)的類庫(kù)進(jìn)行統(tǒng)一管理。 Pear 已經(jīng)成為 PHP 開發(fā)事實(shí)上的標(biāo)準(zhǔn),而 Maven Java 世界的地位也逐漸加強(qiáng),成為標(biāo)準(zhǔn)指日可待。

    另外由于插件的易開發(fā)性,現(xiàn)在有了非常多的可供選擇的插件,如與 eclipse 結(jié)合的插件,與 test 相關(guān)的插件,后面我們結(jié)合 maven 在項(xiàng)目中的使用進(jìn)行詳細(xì)介紹。


    1

    2??????? 項(xiàng)目管理

    Maven 官方把 maven 定義為一個(gè)項(xiàng)目管理工具,我們不妨看看 maven 能給我們的項(xiàng)目提供哪些好的支持。

    2.1?????? 項(xiàng)目標(biāo)準(zhǔn)化

    Maven 一個(gè)重要特性是定義了項(xiàng)目的標(biāo)準(zhǔn)模板,官方說(shuō)法是最佳實(shí)踐。可以通過(guò)命令: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app 創(chuàng)建一個(gè)單一的 maven 項(xiàng)目。創(chuàng)建好的項(xiàng)目,具有了特定的項(xiàng)目結(jié)構(gòu)。這個(gè)項(xiàng)目結(jié)構(gòu)是參考業(yè)界的最佳實(shí)踐而成,為后面使用統(tǒng)一的 maven 命令打下了基礎(chǔ),如測(cè)試 mvn test 、打包 mvn package 等,無(wú)需寫一行腳本,就可以方便的實(shí)現(xiàn)眾多功能。 Maven 還提供其它一些類型模板,可以通過(guò)添加 -DarchetypeArtifactId= type }創(chuàng)建,如 -DarchetypeArtifactId=maven-archetype-site ,生成 site 類型的項(xiàng)目。

    同時(shí)一些好的開源軟件使用了 maven ,也能作為很好的項(xiàng)目模板,如 Equinox Appfuse 的簡(jiǎn)化版),它的 pom 定義了對(duì) hiberante,spring… 的依賴,可以通過(guò) ant new -Dapp.name=NAME 快速生成項(xiàng)目原型,然后對(duì) pom 文件進(jìn)行裁減,以符合自身項(xiàng)目的需要。

    有了這個(gè)標(biāo)準(zhǔn),項(xiàng)目間能方便的進(jìn)行交流,你也很容易了解其它使用 maven 項(xiàng)目的結(jié)構(gòu)。對(duì)于企業(yè)來(lái)說(shuō),引入 maven 就自然引入了規(guī)范,這可比費(fèi)時(shí)費(fèi)力的寫文檔,定規(guī)范有效的多了。

    2.2?????? 文檔和報(bào)告

    使用 mvn site 可以快速生成項(xiàng)目站點(diǎn), apache 很多開源項(xiàng)目站點(diǎn)都采用 maven 生成,會(huì)出現(xiàn) built by maven 字樣的圖標(biāo)。

    maven 提供的針對(duì)如 junit checkstyle pmd 等的插件,能夠方便的進(jìn)行測(cè)試和檢查并能直接生成報(bào)告。使用都很簡(jiǎn)單,如 mvn surefire-report:report 就能自動(dòng)進(jìn)行 junit 測(cè)試,并生成 junit 報(bào)告, mvn pmd:pmd 生成 pmd 報(bào)告。具體使用可以在 http://maven.apache.org/plugins/index.html 找到。

    2.3?????? 類庫(kù)管理

    Maven 一個(gè)很重要的特色就是類庫(kù)管理。通過(guò)在 pom.xml 中定義 jar 包版本和依賴,能夠方便的管理 jar 文件。以下是一個(gè)簡(jiǎn)單的 jar 定義片斷:

    <dependency>??????????????????????????????????????????????????????????????????????

    ????? <groupId>org.hibernate</groupId>

    ????? <artifactId>hibernate</artifactId>

    ????? <version>3.1</version>

    ????? <type>jar</type>

    ????? <scope>runtime</scope>

    ? </dependency>

    這個(gè)片斷告訴我們,依賴的 jar groupId org.hibernate artifactId hibernate ,版本為 3.1 scope runtime 。在實(shí)際項(xiàng)目中,會(huì)將 M2_REPO(maven 本地倉(cāng)庫(kù)地址 )/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar 放入 classpath

    同時(shí) maven 會(huì)通過(guò) pom.xml 管理 jar 包間的依賴。比如上面的 hibernate-3.1.jar 同級(jí)目錄肯定會(huì)有一個(gè) hibernate -3.1.pom ,在這個(gè) pom 文件中指定了這個(gè) jar 對(duì)其它一些 jar 的依賴。而這個(gè) pom 文件是遠(yuǎn)程倉(cāng)庫(kù)提供,無(wú)需進(jìn)行修改,執(zhí)行 maven 相關(guān)命令就會(huì)自動(dòng)根據(jù)相關(guān)依賴去下載 jar 包。這樣只需定義對(duì) hibernate 的依賴而無(wú)需關(guān)心相關(guān) jar ,在構(gòu)建項(xiàng)目上方便了很多。

    因?yàn)?/span> pom 文件對(duì) jar 的管理,也產(chǎn)生了一個(gè)很吸引人的特性:項(xiàng)目文件很小。以往一個(gè) web 項(xiàng)目中, jar 文件都要放入 WEB-INF/lib 下,并放入 cvs(svn) 中,很容易就達(dá)到幾十 M 。而通過(guò) maven ,只需一個(gè) pom.xml ,在執(zhí)行 mvn eclipse:eclipse 時(shí)再去遠(yuǎn)程倉(cāng)庫(kù)下載,項(xiàng)目文件一般只需幾百 K

    2.4?????? 發(fā)布管理

    使用 maven 可以方便的進(jìn)行項(xiàng)目發(fā)表管理。在項(xiàng)目開發(fā)到一定階段,可以使用 mvn package 打包,它會(huì)自動(dòng)先運(yùn)行 mvn test ,跑所有的 testcase ,只有全部通過(guò)才能正確打包。生成的 war 包(如果項(xiàng)目的 packaging war )在 target 目錄下。這個(gè) war 包與使用 ant 腳本生成一樣,但無(wú)需一行腳本,這也是 maven 對(duì)比 ant 的優(yōu)勢(shì)之一。使用 mvn install 將編譯和打包好的文件發(fā)布到 distributionManager 指定的遠(yuǎn)程 repository 。使用 mvn deploy 可以自動(dòng)管理項(xiàng)目版本。

    ?

    3 ??????? 使用 maven

    Maven 使用簡(jiǎn)單,插件豐富且經(jīng)過(guò)大量項(xiàng)目考驗(yàn),在項(xiàng)目中引入的風(fēng)險(xiǎn)很小。筆者在項(xiàng)目中使用 maven ,新進(jìn)員工在半小時(shí)內(nèi)就能成功使用 maven 構(gòu)建項(xiàng)目,并很快掌握幾個(gè)常用的命令。 Maven 也不需要什么特殊的設(shè)施。如果項(xiàng)目全部使用開源軟件,并且不需要 maven 管理項(xiàng)目版本,只需要一個(gè) SCM 環(huán)境( CVS SVN ),共享開發(fā)源碼就可以。把 pom.xml 中的 repository 設(shè)為官方地址就行,配置如下:

    <repository>

    ????? <id>central</id>

    ????? <url>http://www.ibiblio.org/maven2</url>

    </repository>

    這個(gè)官方 remote repository 上有非常多的開源軟件,應(yīng)該能滿足大部分項(xiàng)目的需要。如果有項(xiàng)目需要而它上面暫時(shí)還沒有的軟件,或者希望使用公司內(nèi)部的軟件,那么就需要自己配置一個(gè) repository 了。

    3.1?????? 自建私服

    傳奇私服大家應(yīng)該都聽過(guò),一個(gè)網(wǎng)吧自己搞個(gè)私服,一伙人免費(fèi)在上面砍殺。官方因此少賺了很多錢,因此總想打擊。而 maven 官方卻對(duì)自建私服很是支持,我們總算可以正正當(dāng)當(dāng)搞把私服了( Springside 的老大江南白衣就是創(chuàng)建私服的好手)。我們就來(lái)介紹下自建私服的最快方法。

    首先需要一個(gè) http server ,找臺(tái)服務(wù)器裝上 apache 就行。放一個(gè)空的 maven 目錄到 htdocs 下,假設(shè)服務(wù)器 ip 192.168.0.1 ,確認(rèn)能用 http://192.168.0.1/maven 訪問到。然后在自己機(jī)器上裝好 maven2 ,初始化好項(xiàng)目,在 pom.xml 放入需要的 jar 定義,運(yùn)行如 mvn eclipse:eclipse 就自動(dòng)從官方下載 jar 到本地,如果不做配置,默認(rèn)本地 repository ${user.home}/.m2/ 。對(duì)于 windows xp 來(lái)說(shuō)一般在 C:\Documents and Settings\ username%\.m2 下,其中% username %為操作系統(tǒng)登錄用戶名。這時(shí)你可以看到 ${user.home}/.m2/ 下多了個(gè) repository 目錄,里面有很多的項(xiàng)目相關(guān) jar ,目錄按 groupId/ artifactId/version 排好。把 repository 目錄整個(gè)拷貝到 apache 服務(wù)器的 maven 目錄下,如果需要官方缺少的 jar 或公司內(nèi)部 jar ,仿照這個(gè)目錄結(jié)構(gòu),做好 jar 放到 maven 目錄下。自建私服成功!

    要使用私服,只需修改 pom.xml ,在 repository 配置后加上:

    <repository>

    ????? <id>companyName</id>

    ????? <url>http:// ${ip}/maven</url>

    </repository>

    這樣需要下載 jar 時(shí),會(huì)先到本地 repository 查看,沒有下載過(guò)再到官方搜索,沒有找到再到后面的 repository 查找。

    3.2?????? 安裝配置

    Maven 的安裝很簡(jiǎn)單:

    1.???????? apache 網(wǎng)站上下載 maven 安裝包,實(shí)際上就是個(gè)壓縮文件。將其解壓到你想要存放 maven 的目錄中。在這里假設(shè)你將 maven 解壓到 C:\Program Files\Apache Software Foundation\maven-2.0.4 中。

    2. ????? C:\Program Files\Apache Software Foundation\maven-2.0.4\bin 設(shè)到你的系統(tǒng)環(huán)境變量%PATH%中。

    3. ????? 同時(shí)確保你已經(jīng)將你的JDK安裝目錄設(shè)為java_home系統(tǒng)變量。

    4.???????? 打開個(gè)命令行窗口,運(yùn)行 mvn –version 驗(yàn)證是否安裝成功。

    5.???????? 如果使用 eclipse ,在運(yùn)行 mvn eclipse:eclipse 生成 eclipse 項(xiàng)目文件后,需加入 M2_REPO Classpath Variables 中,指向 本地 repository ,例如: C:/Documents and Settings/Owner/.m2/repository

    3.3?????? 基本使用流程

    在項(xiàng)目進(jìn)程中,不必做什么配置,在 pom.xml 同級(jí)目錄, cmd 使用簡(jiǎn)單的 maven 命令,就可以完成初始化 -> 開發(fā) -> 測(cè)試 -> 發(fā)布 的全過(guò)程。 Maven 的基本使用流程如下圖:

    其中在初次使用命令 mvn eclipse:eclipse 時(shí)會(huì)下載很多的插件和 jar ,可能需要較長(zhǎng)的時(shí)間,建議泡杯咖啡,和同事吹吹牛。如果失敗,可能是網(wǎng)絡(luò)問題,可以重新運(yùn)行 mvn eclipse:eclipse ,已下載好的插件和 jar 不會(huì)再下。運(yùn)行 mvn test mvn package 等命令,產(chǎn)出物都會(huì)放在 target 目錄下。如果在使用過(guò)程中有什么問題,也可以和我聯(lián)系, mail:pesome@gmail.com ,我們一起來(lái)嘗試解決。

    ?

    總結(jié):

    Maven 作為新的項(xiàng)目管理工具,簡(jiǎn)單易用,能對(duì)項(xiàng)目的各個(gè)階段提供大力支持,同時(shí)由于它易擴(kuò)展的插件體系架構(gòu),出現(xiàn)了越來(lái)越多的插件,也使得其功能更加強(qiáng)大。短短一篇文章,實(shí)在很難把其特點(diǎn)一一盡述, maven 還有很多好用的功能和插件等待我們?nèi)ナ褂煤烷_發(fā)。而學(xué)習(xí)新技術(shù)的最好方式就是實(shí)踐,大家如果有興趣,盡快下載一個(gè)最新版,開始你的 maven 之旅吧!

    ?

    作者簡(jiǎn)介:張俊,網(wǎng)名 pesome ,上海交大軟件工程碩士, 2 JavaEE 開發(fā)經(jīng)驗(yàn),資歷尚淺。去年下半年開始接觸 spring 等開源軟件,并產(chǎn)生了濃厚的興趣。今年 3 月開始做 www.openfans.net ,用一堆開源軟件搭建而成,希望為中國(guó)的開源事業(yè)做出一點(diǎn)貢獻(xiàn)。

    ?

    參考文檔:

    1.?????? http://maven.apache.org 官方網(wǎng)站文檔

    2.?????? http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/ Maven2 的新特性

    posted on 2006-09-21 11:37 pesome 閱讀(18690) 評(píng)論(10)  編輯  收藏 所屬分類: 開源軟件

    評(píng)論

    # re: 用Maven做項(xiàng)目管理 2006-09-21 23:31 jeffjie

    項(xiàng)目剛搭上了Maven這班車。
    這篇文章就是Persome在程序員上登的吧?  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2006-09-22 09:26 pesome

    恩,也是想推廣maven,讓更多的項(xiàng)目使用maven。  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2006-12-22 16:22 fy

    我按照你的方法設(shè)置了私服,拷貝了自己naf-1.0.0.jar包到服務(wù)器上,并且刪除了本機(jī)上,可是運(yùn)行通不過(guò)。下面是我執(zhí)行后的錯(cuò)誤結(jié)果

    [INFO] task-segment: [compile]
    [INFO] ----------------------------------------------------------------------------
    [INFO] [resources:resources]
    [INFO] Using default encoding to copy filtered resources.
    Downloading: http://10.10.100.22/maven/nfa/nfa/1.0.0/nfa-1.0.0.pom
    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Error building POM (may not be this project's POM).


    Project ID: nfa:nfa

    Reason: Error getting POM for 'nfa:nfa' from the repository: Error transferring file
    nfa:nfa:pom:1.0.0

    from the specified remote repositories:
    central (http://repo1.maven.org/maven2),
    itsm (http://10.10.100.22/maven)  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2006-12-25 11:05 pesome

    你看看nfa有這個(gè)pom文件嗎,然后看pom文件格式是否正確。可以參考其它軟件的pom,比如spring  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2007-01-26 13:09 HIMMEL

    現(xiàn)在Maven成了很多項(xiàng)目的標(biāo)準(zhǔn)件了  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2007-01-26 13:52 pesome

    呵呵,有標(biāo)準(zhǔn)不是很好嗎?  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理[未登錄] 2007-08-07 19:25 sclsch

    maven還沒體會(huì)到。  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2008-12-26 23:17 Yvon

    在學(xué)習(xí)一些開源的框架的時(shí)候發(fā)現(xiàn)很多都已經(jīng)用maven來(lái)構(gòu)建了,學(xué)習(xí)ing  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理 2010-04-24 00:44 Mofen

    謝謝,提供這么通俗易懂的文章  回復(fù)  更多評(píng)論   

    # re: 用Maven做項(xiàng)目管理[未登錄] 2011-12-16 10:27 TonyWang

    我已有的項(xiàng)目,目錄結(jié)構(gòu)不同MAVEN的標(biāo)準(zhǔn)結(jié)構(gòu),如何將該項(xiàng)目用MAVEN管理起來(lái)  回復(fù)  更多評(píng)論   

    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    主要記錄作者在學(xué)習(xí)java中的每一步足跡。除非特別說(shuō)明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請(qǐng)注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
    歡迎大家訪問:

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    java技術(shù)

    人間百態(tài)

    朋友們的blog

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 午夜成人无码福利免费视频| 久久91亚洲精品中文字幕| 午夜男人一级毛片免费| 国产人在线成免费视频| 桃子视频在线观看高清免费完整 | 亚洲精品无码午夜福利中文字幕 | 久久受www免费人成_看片中文| 亚洲一区在线免费观看| 亚洲精品视频免费看| 亚洲视频免费一区| 91在线品视觉盛宴免费| 亚洲成在人线aⅴ免费毛片| 最近中文字幕mv免费高清电影| 国产美女在线精品免费观看| 成人免费福利电影| 国产极品美女高潮抽搐免费网站| 免费一看一级毛片| 中文字幕在亚洲第一在线| 伊人久久亚洲综合| 亚洲av永久无码精品网站| 久久青青草原亚洲av无码app| 亚洲综合久久成人69| 色偷偷亚洲女人天堂观看欧| 香蕉大伊亚洲人在线观看| 麻豆亚洲AV成人无码久久精品| 一二三四在线观看免费中文在线观看| 国产免费福利体检区久久| 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 国产成人在线观看免费网站 | 国产91色综合久久免费分享| 国内免费高清在线观看| 深夜国产福利99亚洲视频| 亚洲欧洲日产国码无码久久99| 亚洲免费视频网站| 亚洲AV成人影视在线观看| 在线亚洲v日韩v| 免费久久人人爽人人爽av| 免费在线视频你懂的| 国产小视频免费观看| 亚洲一区二区三区自拍公司| 亚洲视频免费一区|