maven 多模块下生成模板

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

转载于:https://my.oschina.net/lwhmdj0823/blog/676840

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值