使用eclipse/ideal 均可以經過嚮導建立maven 工程,其支持的模板成百上千,雖然比較強大,可是每當看到那些眼花繚亂的模板,都有種不知所錯的感受,何況這些模板,和公司的規範可能差異很大,生成項目後,還須要花費大量的時間去修改,而現實中,公司的項目都遵循必定的規範,若是可以自定義本身的模板,那麼必然可以提升開發效率並減小出錯的概率。html
此插件可以幫助咱們自定義項目模板,它不只支持交互式建立項目,還支持一鍵建立項目,它既支持建立單個項目模板,還可以支持同時建立多個項目的模板。java
單項目建立 包含以下幾步:apache
mvn archetype:create-from-project cd target/generated-sources/archetype mvn install mvn archetype:generate -DarchetypeCatalog=local
多項目建立,其基本步驟同上,可是若是想增長個性化的需求,那麼須要深刻了解其高級特性.eclipse
運行mvn archetype:create-from-project,${basedir}/target/generate-sources/目錄下會生成模板項目,結構以下:maven
$ tree . |____pom.xml |____src | |____main | | |____resources | | | |____archetype-resources | | | | |____pom.xml | | | | |____src | | | | | |____main | | | | | | |____java | | | | | | | |______packageInPathFormat__ | | | | | | | | |____Sample.java | | | | | |____test | | | | | | |____java | | | | | | | |______packageInPathFormat__ | | | | | | | | |____SampleTest.java | | | |____META-INF | | | | |____maven | | | | | |____archetype-metadata.xml
通常狀況下,mvn archetype:create-from-project生成的模板不夠靈活,此模板生成的項目,其子模塊名稱不可以更改,不然在生成項目的過程當中,會出現找不到模板目錄的問題。archetype-metadata.xml module標籤中惟一可用的變量是:rootArtifactId, 藉助它能夠實現子模塊名稱的部分修改。module中dir 若是須要引入變量,變量名先後必須有兩個下劃線,當子模塊須要自定義模塊名稱時,須要藉助這個變量,也就是子模塊和父模塊名稱中必須存在一段相同的字符。當且僅當子模塊的名稱中包含__rootArtifactId__纔可以實現自定義子模塊名稱。ide
example-archetype ├── pom.xml └── src ├── main └── resources ├── META-INF │ └── maven │ └── archetype-metadata.xml └── archetype-resources ├── __rootArtifactId__-module1 │ ├── pom.xml │ └── src │ ├── main │ │ ├── java │ │ └── resources │ └── test │ └── java │ └── resources ├── __rootArtifactId__-module2 │ ├── pom.xml │ └── src │ ├── main │ │ ├── java │ │ └── resources │ └── test │ └── java │ └── resources └── pom.xml
<requiredProperties> <requiredProperty key="groupId"> <defaultValue>com.company</defaultValue> </requiredProperty> <requiredProperty key="artifactId"> <defaultValue>test-sample</defaultValue> </requiredProperty> <requiredProperty key="version"> <defaultValue>1.0.0-SNAPSHOT</defaultValue> </requiredProperty> <requiredProperty key="package"> <defaultValue>com.company.xx</defaultValue> </requiredProperty> </requiredProperties>
這些原本須要手動輸入賦值的變量,能夠直接使用默認值進行替換,實現一鍵生成項目的做用,在設置默認值的時候須要同時配置在/src/main/resources/META-INF/maven/archetype-metadata.xml和/src/test/resources/projects/basic/archetype.properties中。ui
咱們使用mvn archetype:create-from-project 生成的模板項目中,package名稱可能不是咱們想要的,此時須要自定義package名稱,可使用:mvn archetype:create-from-project -DpackageName=com.company.xxxxxx 實現手動package截取,具體請點擊idea
在${basedir}/target/generated-sources/archetype/目錄下 運行mvn install 會在~/.m2/目錄下生產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.dianping</groupId> <artifactId>sample-archetype</artifactId> <version>1.0.0.0-SNAPSHOT</version> <description>sample-archetype</description> </archetype> </archetypes> </archetype-catalog>
在控制檯任意目錄中運行以下命令,便可建立新項目code
mvn archetype:generate -DarchetypeArtifactId=sample-archetype -DarchetypeGroupId=com.dianping -DarchetypeVersion=1.0.0.0-SNAPSHOT -DgroupId=com.dianping -DartifactId=wed-sample -DarchetypeCatalog=local -Dpackage=com.dianping.wed.demo
在${basedir}/target/generated-sources/archetype/目錄下運行mvn deploy 發佈到私有遠程倉庫 ,而後運行以下命令,便可快速新建項目.
mvn archetype:generate -DarchetypeArtifactId=sample-archetype -DarchetypeGroupId=com.dianping -DarchetypeVersion=1.0.0.0-SNAPSHOT -DgroupId=com.dianping -DartifactId=wed-sample -DarchetypeCatalog=internal,remote -Dpackage=com.dianping.wed.demo
此插件包含的goal不少,每一個goal包含的參數也較爲繁多,功能很是強大,掌握它的使用,只須要維護有限的幾份項目模板,就可以快速開發出功能強大、且很是靈活的項目骨架。
http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html
https://www.luckyryan.com/2013/02/15/create-maven-archetype-from-existing-project/
http://www.theotherian.com/2012/05/maven-archetypes-part-3-how-do-set-up.html
http://www.theotherian.com/2012/05/maven-archetypes-part-1-where-do-i.html
http://bryanbende.com/development/2015/01/06/multi-module-maven-archetypes