基于已有项目,快速创建项目模板
mvn Archetype的妙用
背景
在开发过程中,尤其是使用Maven作为包管理工具时,在创建新模块时,总会有些头疼。
常见场景
从网上下载下来的开源项目(或者公司的大型项目),需要新建一个模块或系统,而这个开源项目,可能层次非常多。这时手动创建就很有可能产生错误。而Maven依赖等
错误,有时候会非常隐蔽,不容易发现。
一.选定原始模型
这里以一个demo为例。此demo层层嵌套(阿里Cola4.0的demo)。如果创建一个新的领域模块
,要创建6个模块,这是非常危险的,也是非常枯燥的。
二.构建原始模型
1.选择需要创建的模板
如demo中,我们就直接以整个demo为原始模型
进行创建,这样,以后就可也直接拿着这个架构结构,创建项目了。
2.生成原始模型
进入demo父工程的pom.xml
目录下(demo-web-parent ),执行(无需修改)
mvn archetype:create-from-project
3.发送原始模型
到本地仓库
上面刚刚生成的原始模型
,还需要发送到本地Maven仓库,才可使用。
进入生成好的target\generated-sources\archetype
目录,执行
mvn clean install
4.检查是否推送成功
打开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.alibaba.cola.demo.web</groupId>
<artifactId>demo-web-parent-archetype</artifactId>
<version>1.0.0-SNAPSHOT</version>
<description>demo-web-parent-archetype</description>
</archetype>
</archetypes>
</archetype-catalog>
三.使用原始模型
创建新项目\模块
1.使用IDEA创建
- File->New->Project/Module,看到如下界面,输入刚刚
archetype-catalog.xml
文件中看到的三维坐标
。第四项,可不填。
- 按照实际填写即可。
- 第三步,毕竟比较重要,有很多可选项,当然,也可以不填。
key | 实例 | 说明 |
---|---|---|
groupId | com.tianjingle.wang | 新建项目的工程名 |
artifactId | demotianjingle | 要创建的项目名称 |
version | 1.0.0-SNAPSHOT | 要创建的项目的版本号 |
package | com.tianjingle.wang | 要创建的项目的基础包名 |
archetypeGroupId | com.example | ./m2下的xml里的 |
archetypeArtifactId | demo-archetype | ./m2下的xml里的 |
archetypeVersion | 0.0.1-SNAPSHOT | ./m2下的xml里的 |
archetypeCatalog | local | 从本地仓库选取模板 |
interactiveMode | false |
2.使用mvn命令创建
字段说明,如上面表格
mvn archetype:generate -DgroupId=ltzDemo -DartifactId=com.ltz -Dversion=1.0.0-SNAPSHOT -Dpackage=com.ltz.demo -DarchetypeGroupId=com.alibaba.cola.demo.web -DarchetypeArtifactId=demo-web-parent-archetype -DarchetypeVersion=1.0.0-SNAPSHOT -B -DarchetypeCatalog=local -DinteractiveMode=false