Maven Archetype 多 Module 自定義代碼腳手架

大部分公司都會有一個通用的模板項目恩尾,幫助你快速創(chuàng)建一個項目。通常挽懦,這個項目需要集成一些公司內部的中間件翰意、單元測試、標準的代碼格式信柿、通用的代碼分層等等猎物。

今天,就利用 Maven 的 Archetype 插件來簡單實現(xiàn)這一功能角塑。

image

通過上面的圖很清楚可以看到蔫磨,實際利用這個插件機制就簡單的幾個步驟:

  1. archetype:create-from-project ,根據(jù)自己的項目代碼生成原型項目
  2. 通過 install 等命令生成原型文件
  3. archetype:generate圃伶,通過原型生成目標項目

看起來挺簡單的堤如,但是你會發(fā)現(xiàn)你用網(wǎng)上搜到的資料來玩的話蒲列,你生成的項目特別傻X,包括官方的文檔搀罢,我也真是沒搞明白他們?yōu)楹文敲磁1苹柔徊絻刹健@浦痢>退麐尯昧耍?/p>

一堆問題抵赢,比如 module 名稱不會變、包名變了代碼中沒變唧取,依賴報錯一大堆問題铅鲤,還是有必要說下中間要怎么做的。

創(chuàng)建Archetype

首先枫弟,準備好我們自己的模板項目邢享,保證代碼都是OK的。

進入項目根目錄淡诗,執(zhí)行命令:

mvn archetype:create-from-project

然后項目根目錄下會生成target文件夾骇塘,這個很簡單,不會有任何障礙韩容,你看下面的圖款违,注意看每個模塊的名字,這是我改過的H盒住奠货!

你生成應該會發(fā)現(xiàn)他不長這樣,這就是問題白颉递惋!接著往下看吧。

image

這里最核心的部分就在于怎么修改target/generated-sources/src/main/resources/archetype-resources下的文件溢陪。

如果不修改直接繼續(xù)的話萍虽,最終生成的項目會發(fā)現(xiàn)module的名稱不會變,包名也不會變形真,代碼里引用的會有一堆報錯杉编。

接著,我們看看咋改的咆霜,這一堆破問題邓馒。

修改父pom

首先,找到根目錄的pom文件蛾坯,會發(fā)現(xiàn)缺少module信息光酣,這個必須加上。

    <modules>
        <module>${rootArtifactId}-client</module>
        <module>${rootArtifactId}-common</module>
        <module>${rootArtifactId}-service</module>
        <module>${rootArtifactId}-facade</module>
        <module>${rootArtifactId}-starter</module>
    </modules>

父pom依賴引用的每個module也要修改脉课,groupId 和 artifactId 按照我給出的方式來改救军,不要寫死2埔臁!

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>${groupId}</groupId>
                <artifactId>${rootArtifactId}-client</artifactId>
                <version>${project.version}</version>
            </dependency>
            ... ...
        </dependencies>
    </dependencyManagement>

修改module

這個就是圖中的問題唱遭,默認生成的module可能就是模板項目的名字戳寸,需要修改成類似__rootArtifactId__-client這種形式,注意是雙下劃線拷泽。

然后module中的互相引用 groupId 和 artifactId 按照父 pom 的方式對應修改疫鹊。

archetype-metadata 修改

找到META-INF/maven/archetype-metadata.xml文件,修改modules相關的部分司致,重點注意看 id 拆吆、dir、name 的修改方式蚌吸。

<modules>
    <module id="${rootArtifactId}-client" dir="__rootArtifactId__-client" name="${rootArtifactId}-client">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
    ... ...
</modules>    

修改完成之后,進入 target/generated-sources/archetype目錄砌庄,執(zhí)行命令:

mvn install

順便執(zhí)行下mvn deploy上傳到nexus羹唠。

使用Archetype

經(jīng)過上面的步驟,原型 Archetype 已經(jīng)創(chuàng)建完成娄昆,其實最大的坑也就是上面那部分佩微,花了老半天時間,簡直坑爹啊萌焰。

下面看看怎么使用吧哺眯,兩種使用方式。

命令行

隨便進入你想保存項目的路徑扒俯,執(zhí)行命令奶卓。

mvn archetype:generate -DarchetypeCatalog=local

依次按照提示輸入 groupId、artifactId 即可完成創(chuàng)建撼玄。

那怎么給其他人使用夺姑?

你的本地maven倉庫目錄(比如~/.m2/repository)有一個文件archetype-catalog.xml,共享給其他人就行了掌猛。

<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
    xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <archetypes>
    <archetype>
      <groupId>com.example</groupId>
      <artifactId>template-archetype</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <description>Example Project</description>
    </archetype>
  </archetypes>
</archetype-catalog>

IDEA

新建項目盏浙,選擇 Maven,勾選 Create from archetype荔茬,選擇 Add Archetype...

image

接著废膘,輸入我們自定義的 Archetype 的 GroupId、ArtifactId慕蔚、Version 信息丐黄。

Add 成功之后就可以在列表中看到我們自己的 archetype,然后按照流程創(chuàng)建即可孔飒。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末孵稽,一起剝皮案震驚了整個濱河市许起,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菩鲜,老刑警劉巖园细,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異接校,居然都是意外死亡猛频,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門蛛勉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹿寻,“玉大人,你說我怎么就攤上這事诽凌≌毖” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵侣诵,是天一觀的道長痢法。 經(jīng)常有香客問我,道長杜顺,這世上最難降的妖魔是什么财搁? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮躬络,結果婚禮上尖奔,老公的妹妹穿的比我還像新娘。我一直安慰自己穷当,他們只是感情好提茁,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馁菜,像睡著了一般甘凭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上火邓,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天丹弱,我揣著相機與錄音,去河邊找鬼铲咨。 笑死躲胳,一個胖子當著我的面吹牛,可吹牛的內容都是我干的纤勒。 我是一名探鬼主播坯苹,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摇天!你這毒婦竟也來了粹湃?” 一聲冷哼從身側響起恐仑,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎为鳄,沒想到半個月后裳仆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡孤钦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年歧斟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偏形。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡静袖,死狀恐怖,靈堂內的尸體忽然破棺而出俊扭,到底是詐尸還是另有隱情队橙,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布萨惑,位于F島的核電站捐康,受9級特大地震影響,放射性物質發(fā)生泄漏咒钟。R本人自食惡果不足惜吹由,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一若未、第九天 我趴在偏房一處隱蔽的房頂上張望朱嘴。 院中可真熱鬧,春花似錦粗合、人聲如沸萍嬉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壤追。三九已至,卻和暖如春供屉,著一層夾襖步出監(jiān)牢的瞬間行冰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工伶丐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悼做,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓哗魂,卻偏偏與公主長得像肛走,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子录别,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355