大部分公司都會有一個通用的模板項目恩尾,幫助你快速創(chuàng)建一個項目。通常挽懦,這個項目需要集成一些公司內部的中間件翰意、單元測試、標準的代碼格式信柿、通用的代碼分層等等猎物。
今天,就利用 Maven 的 Archetype 插件來簡單實現(xiàn)這一功能角塑。
通過上面的圖很清楚可以看到蔫磨,實際利用這個插件機制就簡單的幾個步驟:
- archetype:create-from-project ,根據(jù)自己的項目代碼生成原型項目
- 通過 install 等命令生成原型文件
- 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)他不長這樣,這就是問題白颉递惋!接著往下看吧。
這里最核心的部分就在于怎么修改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...
接著废膘,輸入我們自定義的 Archetype 的 GroupId、ArtifactId慕蔚、Version 信息丐黄。
Add 成功之后就可以在列表中看到我們自己的 archetype,然后按照流程創(chuàng)建即可孔飒。