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

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

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

    posts - 1,  comments - 25,  trackbacks - 0
    一.背景
    Maven2 的基本原理很簡單,采用遠程倉庫和本地倉庫以及 pom(project object model).xml ,將 pom.xml 中定義的 jar 文件從遠程倉庫下載到本地倉庫,各個應用使用同一個本地倉庫的 jar ,同一個版本的 jar 只需下載一次,而且避免每個應用都去拷貝 jar 。如圖 1 。同時它采用了現在流行的插件體系架構,只保留最小的核心,其余功能都通過插件的形式提供,所以在執行 maven 任務時,才會自動下載需要的插件。這個特性也為客戶系統的升級帶來的很大的方便,客戶每次升級的時候可以使用maven的遠程部署功能自動下載最新的系統組件(jar),并重新打包部署,很大程度的減少的系統升級的工作量。
    理解Maven的原理,可以參考 Pear ――PHP擴展與應用庫( the PHP Extension and Application Repository ),其原理非常類似,都有一個官方庫,都是微內核,通過網絡將需要的文件下載到本地,通過官方倉庫將相應的類庫進行統一管理。
    Maven2的基本安裝方法網上很多,就到http://maven.apache.org下載一個最新版,解壓后即可,如果需要在命令行運行,還需要設置一些環境變量,網上的資料很多,這里就不多說了??傊?,安裝成功后當你在命令行下執行maven -version后正確顯示當前maven的版本即可。
    我們在項目中結合maven的進行開發的主要思路:
    1.建立支持Maven2的開發框架,框架中結合了一些項目功能和工具類,并且此框架本身是一個eclipse工程,支持使用eclipse IDE的開發,并通過CVS可進行團隊協作。
    2.在Maven2的pom.xml中制定開發框架的依賴包,并建立依賴包的團隊管理本地服務器,使團隊中的包依賴得到統一管理。
    3.每日下班后,在構建服務器上每日從cvs上下載各個團隊開發人員的代碼,統一進行集成構建和測試。由于是每日構建,所以發現的bug可及時反饋給開發人員進行修正,避免了一般開發過程中的bug長時間遺留的情況。

    二.實施過程

    為了實現上述思路,我們分幾步實施:

    1.首先需要構建一個系統的開發框架
    我們有兩種方式構建,
    其一是從零開始構建全新的框架,進入commond line,cd 到一個目錄 ,執行


    Java代碼 復制代碼
    1. mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp  


    執行完畢后接下來cd 到項目目錄my-webapp下,執行
    Java代碼 復制代碼
    1. mvn package  
    2. mvn eclipse:eclipse  


    之后,打開eclipse,到其目錄下導入項目,并手動編輯pom.xml文件,設定指定的jar包,比如加入一個jwebunit的jar包,我們需要在pom中添加一段:
    Java代碼 復制代碼
    1. <dependency>   
    2.             <groupId>jwebunit</groupId>   
    3.             <artifactId>jwebunit</artifactId>   
    4.             <version>1.2</version>   
    5.             <scope>test</scope>   
    6.             <exclusions>   
    7.                 <exclusion>   
    8.                     <groupId>rhino</groupId>   
    9.                     <artifactId>js</artifactId>   
    10.                 </exclusion>   
    11.             </exclusions>   
    12.         </dependency>  



    其中指定了包的名稱,版本,使用的范圍域等,pom.xml設置方式網上也是一堆一堆的,具體的可以自己搜搜。同時我們也可以使用maven2在 eclipse中的插件進行編輯,很方便,就不用記住那些該死的標簽了。插件下載地址 http://m2eclipse.codehaus.org /update,將這個url填入到eclipse的Help-》Software Updates->find&install中新建一個插件下載地址的對話框中即可下載。
    這種方式是完全自定義一個全新的工程后再進行框架搭建,比較累,尤其是添加依賴包的時候,需要根據自己的項目需要一個一個添加,很煩人,所以我們使用的第二個方法就直接找了一個現成的,到 Appfus 的網站http://appfuse.org/ 根據項目需要下載了一個項目框架作為原型,我們使用的是appfuse-light-webwork-ibatis- 1.8.2(webwork2.26,spring2.0,ibatis2.0),如果你使用的是其他的的技術,如 struts2,hibernate....直接到網站上下載一個相應的框架即可。appfuse框架使用maven2作為基本構建工具,其中自帶的 pom.xml也替開發人員寫好了,中所定義的依賴包可滿足一般的開發需要,如需要自己指定的包,那么直接在其pom.xml中添加即可。要將這個框架作為eclipse工程使用,需要在解壓后的框架目錄下執行:

    Java代碼 復制代碼
    1. mvn eclipse:eclipse -DdownloadSources=true  



    這個命令會將工程將框架轉換為eclipse工程,并從遠程下載jar包到本地倉庫(window下是(C:\Documents and Settings\${username}\.m2\repository),之后執行:

    Java代碼 復制代碼
    1. mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo  



    其中path-to-eclipse-workspace是本機的eclipse的worksapce的路徑。執行后maven會在eclipse中建立一個M2_REPO環境變量,并將其中所有的jar包引入到工程中,完全自動化,十分方便。
    打開eclipse修改開發中的環境變量(我們項目中使用了Myeclipse插件),找到相應的工程,發現框架中已有一些代碼,這是appfuse提供給開發人員的示例代碼,我們可以按照自己以前項目的積累進行對框架進行完善,形成一套自己的開發框架,之后設置工程環境變量,在該項目中右鍵 ->Myeclipse->add web capabilities->指定該工作空間下的Src/main/webapps作為WEB工程的根路徑,并指定修改JAVA Build Path中
    Java代碼 復制代碼
    1. src/main/java   
    2. src/main/resource   
    3. src/test/java  

    的三個soucrefolder的outputpath 為scr/main/webapp/WEB-Inf/class,這樣設置的目的是便于開發人員在本地進行部署測試,否則按照appfuse原有的工程設置是不能進行順利部署的。
    至此,我們已經將Maven2結合到項目中,一開始可能對目錄結構有些不適應,畢竟這是maven提供的項目框架格式,可以修改為自己習慣的,但是不建議這樣做。設置完成后,cd到項目路徑下,運行
    Java代碼 復制代碼
    1. mvn test   
    2. mvn package  
    3. mvn install  



    三個命令,均成功后,可上傳到cvs/svn上面去,共享給項目組人員,各開發人員可直接使用,但有可能M2_REPO環境設置路徑不一樣(C:\Documents and Settings\${username}\.m2\repository,畢竟不是所有人都把系統裝在C盤),需要手動修改一下。

    2.建立開發團隊內部倉庫
    為了便于團隊的依賴包管理,我們不能全部使用官網的倉庫,畢竟上面不具備我們項目開發所需要的所有的依賴包,所以我們需要為自己的團隊建立一個內部倉庫,可以自己管理所需的依賴包,建立一個內部倉庫也十分簡單(附錄中我們會使用artifactory進行開發內部庫建立):

    首先需要一個 http server ,找臺服務器裝上 apache 就行。放一個空的 maven 目錄到 htdocs 下,假設服務器 ip 為 192.168.0.1 ,確認能用 http://192.168.0.1/maven 訪問到。

    copy 本地倉庫的jar包到服務器:對于 windows xp 來說一般在 C:\Documents and Settings\ % username%\.m2 下,其中% username %為操作系統登錄用戶名。這時你可以看到 ${user.home}/.m2/ 下有個 repository 目錄,里面有很多的項目相關 jar ,目錄按 groupId/ artifactId/version 排好。把 repository 目錄整個拷貝到 apache 服務器的 maven 目錄下,如果需要官方缺少的 jar 或公司內部 jar ,仿照這個目錄結構,做好 jar 放到 maven 目錄下?;蛘甙寻點opy到本地,運行:
    Java代碼 復制代碼
    1. mvn install:install-file -Dfile=X:/path/mail-1.3.jar -DartifactId=javamail -Dversion=1.3.1 -Dpackaging=jar -DgroupId=javamail  




    開發人員要使用內部倉庫,只需修改本地工程pom.xml ,在 repository 配置后加上:

    Java代碼 復制代碼
    1. <repository>   
    2.       <id>companyName</id>   
    3.       <url>http:// ${ip}/maven</url>   
    4. </repository>  


    3.每日構建

    為了保證項目質量,盡早的發現項目中的bug,我們需要每日對系統進行構建,這也是我們使用maven的初衷之一,maven的幾個命令就可幫助我們完成這項任務,當然我們可以使用持續構建工具與maven結合實現定時自動構建。構建方式:
    Java代碼 復制代碼
    1. mvn test   
    2. mvn package  
    3. mvn install  


    maven 會自動編譯,測試,運行所有的testcase,這也要求我們的開發人員一定要按照規則編寫單元測試代碼,否則每日構建的意義就不大了。appfuse框架中提供了很好的單元測試代碼,包括針對數據庫層,業務邏輯層,web展示層等等,如果我們能很好的編寫這些單元測試,那么對于系統后續的缺陷管理和控制是大有裨益的。

    構建完成后或構建時需要對最新版本的項目進行部署,便于次日安排測試人員進行測試,maven提供多多種部署方式,在pom.xml進行項目的部署配置,不同的部署方式根據協議的不同,配置方式也有所差異:
    以文件方式部署

    Java代碼 復制代碼
    1. <project>   
    2.         [...]   
    3.         <distributionManagement>   
    4.             <repository>   
    5.                 <id>proficio-repository</id>   
    6.                 <name>Proficio Repository</name>   
    7.                 <url>file://${basedir}/target/deploy</url>   
    8.             </repository>   
    9.         </distributionManagement>   
    10.         [...]   
    11.     </project>  


    以SSH2方式部署

    Java代碼 復制代碼
    1. <project>   
    2.         [...]   
    3.         <distributionManagement>   
    4.             <repository>   
    5.                 <id>proficio-repository</id>   
    6.                 <name>Proficio Repository</name>   
    7.                 <url>scp://sshserver.yourcompany.com/deploy</url>   
    8.             </repository>   
    9.             </distributionManagement>   
    10.         [...]   
    11.     </project>  


    以SFTP方式部署

    Java代碼 復制代碼
    1. <project>   
    2.  [...]   
    3.  <distributionManagement>   
    4.      <repository>   
    5.          <id>proficio-repository</id>   
    6.          <name>Proficio Repository</name>   
    7.          <url>sftp://ftpserver.yourcompany.com/deploy</url>   
    8.      </repository>   
    9.  </distributionManagement>   
    10.  [...]   
    11.  </project>  

    以擴展SSH方式部署

    目前為止上述3中方式已經被Maven包含,所以只要distributionManagement就可以了,但是使用擴展SSH命令部署的話你不僅需要配置distributionManagement還需要一個build extension,如下
    Java代碼 復制代碼
    1. <project>   
    2.        [...]   
    3.        <distributionManagement>   
    4.            <repository>   
    5.                <id>proficio-repository</id>   
    6.                <name>Proficio Repository</name>   
    7.                <url>scpexe://sshserver.yourcompany.com/deploy</url>   
    8.            </repository>   
    9.        </distributionManagement>   
    10.        <build>   
    11.            <extensions>   
    12.                <extension>   
    13.                    <groupId>org.apache.maven.wagon</groupId>   
    14.                    <artifactId>wagon-ssh-external</artifactId>   
    15.                    <version>1.0-alpha-6</version>   
    16.                </extension>   
    17.            </extensions>   
    18.        </build>   
    19.        [...]   
    20.    </project>  

    The build extension specifies the use of the Wagon external SSH provider, which does the work of moving your files to the remote server. Wagon is the general purpose transport mechanism used throughout Maven.

    以FTP方式部署

    Java代碼 復制代碼
    1. <project>   
    2.         [...]   
    3.         <distributionManagement>   
    4.         <repository>   
    5.             <id>proficio-repository</id>   
    6.             <name>Proficio Repository</name>   
    7.             <url><A href="ftp://ftpserver.yourcompany.com/deploy</url>" target=_blank>ftp://ftpserver.yourcompany.com/deploy</url></A>   
    8.         </repository>   
    9.         </distributionManagement>   
    10.         <build>   
    11.             <extensions>   
    12.                 <extension>   
    13.                 <groupId>org.apache.maven.wagon</groupId>   
    14.                 <artifactId>wagon-ftp</artifactId>   
    15.                 <version>1.0-alpha-6</version>   
    16.                 </extension>   
    17.             </extensions>   
    18.         </build>   
    19.         [...]   
    20.     </project>  


    一旦你配置好了相應的POM你可以執行下列命令來開始部署:
    mvn deploy

    同時也可通過執行一下命令生成此項目的站點報告,供項目參與人員使用。
    mvn site


    三. 結論

    maven的強大顯而易見,有很多其他的特性本文沒有提及,如對各類插件的支持,以及對項目模塊劃分和繼承關系的管理,這些都是maven的特性,也是 maven對項目生命周期的詳盡詮釋,有興趣深入的TX可以下載我在附件中提供的教程《Better Builds With Maven2》.同時我也提供我根據appfuse建立的一套項目框架,可在myeclipse環境下使用,大家可以共同探討完善。

    附1:使用artifactory為Maven2團隊開發建立內部開發倉庫詳解
    在真正使用Maven后是為團隊進行定制,所以我們不應使用官網的開發庫,應在本地建立一個內部開發庫對團隊的jar包進行管理,所以我們首先搭建一個內部庫環境,除文章上面所述的搭建Apache服務器方法外,我們還可以使用artifactory(下載地址:http://www.jfrog.org/sites/artifactory /latest/),一個很好的maven內部庫的應用系統,下載后執行bin目錄下的artifactory.bat命令即可。啟動后可訪問控制臺http://內部庫ip:8081/artifactory/驗證服務是否成功啟動。默認的用戶名為admin,密碼為password。artifactory最重要的是可配置第三方jar包,在deploy artifacts中加入并制定其groupId和artifactId即可
    (不要忘記更改本地的pom.xml文件引入新加的jar包)。
    在開發端我們需要更改全局配置文件setting.xml文件,將工程中setting.xml放入本地maven2->conf目錄下,配置內部倉庫的地址,只需要在setting.xml的mirrors元素中加入以下配置:
    Java代碼 復制代碼
    1. <mirror>   
    2.       <id>emay local</id>   
    3.       <mirrorOf>central</mirrorOf>   
    4.       <name>emay local artifactory</name>   
    5.       <url>http://內部庫ip:8081/artifactory/repo</url>   
    6.     </mirror>  

    這里要注意的是,在加入這段代碼后我使用的appfuse框架中自帶的應用服務器tomcat6進行構建,不能正常運行,報tomcat出錯,把這段去掉或者在pom.xml中將應用服務器改為tomcat5.5后運行正常??磥韒aven還是有不少bug需要改進。

    配置完成后再運行mvn install即可正常進行構建,maven會從本地內部庫中尋找項目所依賴的jar包。運行mvn clean清除maven生成文件。



    附2:maven2命令大全

    validate,驗證工程是否正確,所有需要的資源是否可用。
    compile,編譯項目的源代碼。
    test-compile,編譯項目測試代碼。
    test,使用已編譯的測試代碼,測試已編譯的源代碼。
    package,已發布的格式,如jar,將已編譯的源代碼打包。
    integration-test,在集成測試可以運行的環境中處理和發布包。
    verify,運行任何檢查,驗證包是否有效且達到質量標準。
    install,把包安裝在本地的repository中,可以被其他工程作為依賴來使用
    deploy,在整合或者發布環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。
    generate-sources,產生應用需要的任何額外的源代碼,如xdoclet。
    posted on 2008-08-21 10:29 Daniel 閱讀(949) 評論(1)  編輯  收藏 所屬分類: Maven2

    FeedBack:
    # re: 結合Maven2進行J2EE項目構建
    2011-07-11 10:18 | 地球乞丐
    總節的很好,樓主很樂心分享!謝謝了!  回復  更多評論
      

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


    網站導航:
     
    <2011年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 成在人线av无码免费高潮水 | 精品福利一区二区三区免费视频| 在线亚洲午夜理论AV大片| 亚洲国产精品自在自线观看 | 亚洲AV无码一区二区三区在线观看| 亚洲人成色77777在线观看 | 337p日本欧洲亚洲大胆裸体艺术| 人妻18毛片a级毛片免费看| 亚洲AV无码不卡在线观看下载| 人人公开免费超级碰碰碰视频| 亚洲人成电影在线播放| 久久高潮一级毛片免费| 亚洲Av综合色区无码专区桃色| 99国产精品免费视频观看| 亚洲一区二区三区精品视频| 成人人观看的免费毛片| 国产成人不卡亚洲精品91| 亚洲一区日韩高清中文字幕亚洲 | 久草免费手机视频| 亚洲国产精品婷婷久久| 国产精品久久久久免费a∨| 亚洲AV无码AV日韩AV网站| 亚洲春色在线观看| 67194熟妇在线永久免费观看| 最新亚洲卡一卡二卡三新区| 亚洲成a人一区二区三区| a级片免费观看视频| 亚洲国产成+人+综合| 国产永久免费高清在线| 亚洲日本香蕉视频| 国产成人无码免费视频97| 国精产品一区一区三区免费视频| 亚洲一级毛片免观看| 亚洲成年人啊啊aa在线观看| 免费成人在线视频观看| 亚洲精品宾馆在线精品酒店| 国产精品亚洲A∨天堂不卡| 免费毛片在线看片免费丝瓜视频| 国产精品玖玖美女张开腿让男人桶爽免费看 | 成人免费毛片内射美女-百度| 美女视频黄频a免费大全视频|