使用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