【maven】多子模块maven模板工程archetype创建过程
最近项目里需要创建一个多模块(子工程)的模板项目,所以研究了一下maven的archetype plugin。
创建了一个包含多个子模块工程的项目模板。记录下过程。
?
?
一个模板工程任务就是创建一个或多个默认的工程,并为每个工程填充好默认的一些文件和配置。同时要抽象出生成的工程需要的一些属性,做到这些属性可动态配置。
在maven里通过定制的archetype来生成项目模板。maven本身内置了很多archetype 工程模板。通过?
模板工程主要分为两个部分:
1.模板工程定义资源元文件这些元文件是生成工程的时候需要用到的。放在src/main/resources/archetype-resources里。这里面的文件是生成模板工程是需要用到的元文件,一般也就是生成项目是默认填充的一些文件。
src/main/resources/archetype-resources里必须要有一个顶级pom文件(如果是单工程就是工程pom文件),同时子文件夹代表了模块定义。
这些文件可以写成velocity模板语法,在文件里使用一些变量,在生成文件的时候,可以选择通过velocity引擎渲染生成。
如以上例子里的src/main/resources/archetype-resources/common/pom.xml:
可以看到里面使用到了groupId,appName,artifactId等变量,这些变量在生成项目文件的时候会通过vilocity引擎进行替换。至于这些变量定义在哪里,可以看下一部分工程描述文件。
可以根据自己项目的类型和需要,定义任意的资源元文件,如java,xml,MANIFEST.MF等等。
?
?
2.模板工程定义描述文件META-INF/maven/archetype-meatdata.xml有了工程定义元文件还不够。还需要一个东西来描述需要生成工程的结构和文件组成等等,这里可以通过archetype工程定义描述符来定义。
该文件是具体的生成工程规则的描述符。关于工程定义描述文件可以参考maven的官方文档:archetype-descriptor
如下是我写的工程定义描述:
?
?工程描述定义是个xml文件,符的几个重要标签定义解释如下
1.属性变量定义
工程定义里需要用到的属性。如
?
module有三个属性,解释如下:
id???? :相当于工程的artifactId.
dir??? :相当于工程源文件在archetype-resources里对应的directory.
name?? :模块的名字.
3.项目文件集定义fileSets/fileSet*? 文件集合定义
如?
以上代表将archetype-resources里的src/main/java目录及内容作为新工程的目录和内容。里面的每个文件生成都会使用velocity模板引擎渲染,以替换变量。同时当packaged=true是表示会在生成这些新文件的时候,前面加上默认的包。
些属性做到可配置的变量。?
?
总结通过以上两部分定义之后,执行命令mvn clean install就将archetype安装到本地仓库了。
再通过如下命令:
?
archtype定义工程源码见附件。