前言
公司是微服务架构,经常新增模块,这些模块结构都类似,每次手动添加模块总是缺这少那,这两天恰好了解到自定义maven archetype来实现模块的快速搭建,花了一天搞了出来,在公司的项目上用上了,效果还不错。研究过程中官方文档不太清晰,找到的博文也都有点问题,特此总结一下。
maven archetype有什么用?
使用archetype可以迅速生成符合自身项目结构的项目或模块,下图的项目是由archetype直接生成的

结合自定义参数,archetype可以实现以下目标
- 动态生成文件名,如上面的ApplicationStarter就是根据传入的参数pascalApplicationName动态生成的
- 属性替换,如main方法中的${message}生成是被替换为传入的参数。
这个特性在对/resources下配置文件的变量进行替换时最为实用,比如log4j的配置文件,可以根据项目名在对应的目录下生成日志
,避免了手动修改易出错、遗漏的问题。 - 搭建框架结构,如果在archetype中已经配置了会用到的各个包名比如 controller、service、dao,这样之后就不用再手动去创建这些包了,对于比较大的项目也避免了各自为战包名混乱的问题
创建自定义archetype
项目在这里github,这个示范很简单但是已经包含所有的元素,如果想自己定义一个,根据需要修改次项目结构即可
有几个需要注意的地方
- 自定义参数需要在archetype-metadata.xml的requiredProperty中声明
- 保留空包名,需要在根目录的pom.xml下添加includeEmptyDirs属性,在archetype-metadata.xml的fileSet中也需要添加在,否则空包名会被过滤掉
- 自定义参数是基于apache velocity,但是
在archetype-metadata.xml使用velocity是不会生效的
- 对于文件中的参数,velocity使用 ${parameter}的格式,对于文件名,需要使用 __parameter__的格式(左右都是双下划线)
- 很多文章中提到了使用mvn archetype:create-form-project 来快速从现有项目中创建archetype,但是这样会导致后面有很多东西要改,弊大于利。