相關鏈接:
1. 隨便找一個現成的maven項目
假設沒有運行:mvn archetype:create -DartifactId=archetype-template-generator -DgroupId=test生成一個
2. 進入1.中的maven項目
運行:mvn archetype:create-from-project
好了,target/generated-sources/archetype就是我們要的項目了,把這個目錄總體拷貝出來(當然不拷貝也能夠。個人還是習慣獨立出來)
那么這個project是怎么創建模板的呢。接着看
3. 首先我們改動下這個project的信息。便於我們安裝之后使用
打開archetype/pom.xml
<groupId>test</groupId>
<artifactId>archetype-template-generator-archetype</artifactId>
<version>1.0-SNAPSHOT</version>
改動這三項
然后運行:mvn -Dmaven.test.skip=true clean install
(當然,高級定制功能我們以下再說。先走一遍最簡單的流程)
假設沒有錯誤,那么如今我們的模板已經安裝到本機maven倉庫了。接着我們來試着使用這個模板創建一個maven項目
4. 運行:mvn archetype:generate -DarchetypeCatalog=local
不出意外,我們能夠看到3.中安裝的模板(假設看不到,請運行:mvn archetype:update-local-catalog進行更新,本地archetype存放在:${user.home}/.m2/archetype-catalog.xml中),選擇1
提示輸入目標項目的信息。這里我們依據實際情況輸入參數。然后確認Y。這么就依據我們自己的模板創建了一個maven項目。這里的archetypeproject我們能夠復用
參考鏈接
二、這一部分我們來定制剛才生成的archetype項目,滿足我們生成自己定義結果的項目的需求
1. 定制哪些文件會被作為模板
僅僅要我們把文件放到src\main\resources\archetype-resources文件夾以下,而且在src\main\resources\META-INF\maven\archetype-metadata.xml中進行配置
比方:我們加入src\main\resources\archetype-resources\.gitignore,然后在archetype-metadata.xml中加入以下內容:
<fileSets>
<fileSet encoding="UTF-8" filtered="true">
<directory></directory>
<includes>
<include>.gitignore</include>
</includes>
</fileSet>
</fileSets>
又一次mvn -Dmaven.test.skip=true clean install 再次生成項目,就會在新項目中增加.gitignore文件
其它類似配置,我就不具體解釋了
2. 屬性替換
能夠在上面的.gitignore增加${pro-to-replace}內容
而且在archetype-metadata.xml中加入內容:
<requiredProperties>
<requiredProperty key="pro-to-replace"/>
<requiredProperty key="pro-to-replace"/>
</requiredProperties>
我們想這個占位符在實際使用的時候進行替換。這時archetype-metadata.xml中filtered="true"必須配置
這樣假設在生成的向導里會提示我們輸入pro-to-replace,當然我們也能夠在生成的命令行中用-Dpro-to-replace=XXX進行這是,假設設置了,不會提示我們輸入指
我們也能夠像這樣設置默認值:
<requiredProperty key="pro-to-replace">
<defaultValue>pro-to-replace</defaultValue>
</requiredProperty>
當然假設這樣。就不會提示你輸入屬性值,假設不想使用屬性值。僅僅有通過-Dpro-to-replace=XXX進行更改
這么一來,又一次安裝,然運行創建的時候設置屬性:mvn archetype:generate -DarchetypeCatalog=local -Dpro-to-replace=pro_value
生成project的.gitignore中的${pro-to-replace}就會被替換為pro_value
注意:這里的屬性名稱不能包括.
比方:pro.to.replace是不行的
版權聲明:本文博客原創文章。博客,未經同意,不得轉載。