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

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

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

    隨筆-95  評論-31  文章-10  trackbacks-0
    maven其實也很笨重繁瑣,還是避免不了xml的各種配置,相比較gradle更靈活簡潔,但公司不會讓人這么靈活構建項目。不廢話了,進入主題。
    現在開發中,一個項目基本都是分模塊開發,一個模塊一個project,然后一起管理所有模塊,雖然maven已經提供了不少archetype,生成基本的項目結構,但感覺有時候還是不太滿足自己的需求,有些jar或許用不到,整體模塊架構目錄結構以及依賴不是自己想要的,這個時候自定義archetype就能派上用場。
        自定義開發archetype,首先得明確兩個概念,maven的聚合和繼承,聚合是為了管理多模塊build,繼承是為了管理依賴,這里的需求是自動構建一個父模塊,以及多個子模塊,同時父模塊既是聚合也可繼承依賴。

    步驟一:創建一個maven工程,結構中只需要個src/main/resources目錄以及一個簡單的pom.xml,pom中packaging類型為jar即可,如圖:


    步驟二:src/main/resources目錄下面必須包含兩個目錄:archetype-resources和META-INF/maven/archetype-metadata.xml,如圖:

    說明:archetype-resources目錄是用來存放將來生成的項目結構是什么,如上圖所示有兩個工程module-service和web以及一個父pom.xml,這個完全依據你的需求寫,META-INF/maven/archetype-metadata.xml是用來描述如何生成項目結構。

    步驟三:描述archetype-metadata.xml 可參考http://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html
    里面只有三個元素標簽<requiredProperties/>、<fileSets/>、<modules/> 如圖:

    其實只要明白archetype-resources目錄和這個xml描述相對應,這里的<requiredProperty/><fileSets/><modules/>就很好理解
    1:<requiredProperty/>創建工程用戶必填內容,用于Velocity templates替換,只要<fileSet>標簽的filtered為true,即可表明該fileSet包含的文件內容都進行替換,比如每個子模塊的artifactId都不一樣,即可在pom里面<artifactId>${module-artifactId}</artifactId>,這里的值即可替換成用戶輸入的值。
    2:這里根標簽下的<fileSets/>對應archetype-resources根目錄。
    3:<modules/>對應archetype-resources根目錄下面的module-service和web目錄。
    4:<module/>又可包含fileSet標簽,描述子模塊的項目結構。
    5:對于多模塊開發來說,maven會采用默認的父子模塊目錄結構,所以這里根標簽下的<fileSets/>沒有必要存在,刪除即可,因為只要在archetype-resources根目錄下有一個pom.xml,將來生成的父子模塊目錄結構,父目錄下會自動包含該pom文件。

    再看archetype-resources目錄下的子模塊如圖:


    提示:
    1:子模塊包含的目錄結構是將來生成工程后會包含的目錄,里面仍然會用到Velocity templates(需要在archetype-metadata.xml中子模塊的fileSet標簽里設置元素filtered="true",如果還需要生成包那么packaged="true"即可),比如每個類會有包名那么這樣寫:package ${package}.xxx,因為包名一般采用groupId.artifactId的格式,也即用戶輸入的內容,用${package}即可替換成包名。
    如圖:

    2:子模塊中建立的包如src/main/java下面,api、entity、services等見上上圖~,無需添加根包名,因為maven會根據groupId.artifactId自動生成包名,也即如果fileSet標簽的元素packaged="true"且包下面存在java類文件,那么api、entity、services等會默認生成在該groupId.artifactId包下面。
    3:子模塊module-service繼承父pom(archetype-resources根目錄下的pom.xml)的依賴,無需在子模塊里面添加<parent/>標簽,因為maven默認會認為子模塊繼承父pom的依賴, 會自動加入<parent/>標簽,如圖:



    無需添加<parent/>標簽,生成工程后,會自動添加。

    至此一切完畢,然后運行mvn clean install即可將該archetype安裝到本地倉庫,在控制臺輸入mvn archetype:generate -DarchetypeCatalog=local選擇你的archetype即可以交互方式生成工程,如果有錯誤,控制臺會提示,按錯排除即可。
    用eclipse也可安裝,點擊maven project-->next-->Catalog選擇Default Local-->Add Archetype-->輸入該archetype的groupId、artifactId、version確定即可出現。

    posted on 2015-02-12 00:43 朔望魔刃 閱讀(2211) 評論(0)  編輯  收藏 所屬分類: maven

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


    網站導航:
     
    主站蜘蛛池模板: 免费一级全黄少妇性色生活片| 亚洲AV综合色区无码另类小说| 嫖丰满老熟妇AAAA片免费看| 97人伦色伦成人免费视频| 午夜私人影院免费体验区| 国产色婷婷精品免费视频| 国外亚洲成AV人片在线观看| 亚洲AV日韩精品久久久久久久| 亚洲一区二区三区国产精品无码| 色屁屁在线观看视频免费| 日本免费人成视频在线观看| 欧洲精品成人免费视频在线观看| 亚洲国产美女精品久久| 有码人妻在线免费看片| 国产一卡二卡3卡四卡免费| 中文文字幕文字幕亚洲色| 成人爽a毛片免费| 日韩一品在线播放视频一品免费| 久久精品国产亚洲77777| mm1313亚洲国产精品无码试看| 永久在线观看免费视频| 亚洲天天做日日做天天欢毛片| 一级特黄录像视频免费| 女性自慰aⅴ片高清免费| 色九月亚洲综合网| 国产亚洲成人在线播放va| 亚洲精华国产精华精华液网站| 久草视频在线免费看| 久久久久亚洲AV成人网人人软件| 成年免费a级毛片免费看无码| 两个人看的www免费视频| 91成人免费观看| 在线日韩av永久免费观看| 成人亚洲国产精品久久| 波多野结衣免费视频观看| 亚洲日韩精品国产一区二区三区| 成人无码a级毛片免费| 亚洲人成电影青青在线播放| 亚洲一区免费视频| 日韩免费一区二区三区在线播放| 在线a亚洲老鸭窝天堂av高清|