一、背景
最近部门的项目进行多模块拆分,一个maven模块里包含多个maven子模块,为了方便创建多模块,部门年轻的架构师(我很佩服他)用maven-archetype来创建多模块骨架,然后创建多模块就方便多了。
二、创建多模块骨架
1、首先创建父模块
<groupId>com.cn.dl</groupId>
<artifactId>biz-base-archetype</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
2、然后创建两个子模块,这个根据自己的项目结构来创建
<modules>
<module>biz-base-archetype-service</module>
<module>biz-base-archetype-impl</module>
</modules>
3、最后创建好的模块结构
4、接下来根据创建的模版来生成骨架
进入当前项目的根目录,例如:cd biz-base-archetype/目录下,然后执行命了:maven archetype:create-from-project
初次需要下载很多jar包,时间稍微有点长,成功之后,可以看到下面内容
子模块的命名是父模块的命名 + 子模块的功能名,例如这里父模块是biz-base-archetype,子模块中,一个提供接口,一个提供具体实现,那么子模块最终的命名:biz-base-archetype-service、biz-base-archetype-impl,模版里面是通过__rootArtifactId__占位符来替换自己创建的父模块的artifactId,这样最终生成的模块就是严格按照父模块的artifactId来命名。
5、生成骨架成功之后,发布到本地仓库,执行命令mvn install
进入 target/generated-sources/archetype/目录下,然后执行mvn install
最后在本地仓库就可以找到对应的模版
三、使用模版
1、添加模块
这样模版就添加成功了
2、选中biz-base-archetype-archetype,创建模块biz-task-api
一路next,不需要改动!!!
到这里使用自己创建的骨架模块创建多模块就OK了,是不是很爽!
四、可能出现的问题:
1、发现创建的多模块没有src/main/java目录,模块创建成功之后还要去创建目录,这样多麻烦,网上说在模块创建时,添加参数archetypeCatalog=internal 、archetype=Internal,貌似都不起作用,最后发现是archetype-metadata.xml里面没有申明去创建src/maven/java和src/main/resources目录!所以,在骨架模块里面创建Test.java、test.properties两个空文件
然后重新按照前面的步骤执行maven archetype:create-from-project、然后删除本地仓库中的骨架模版,再执行 mvn install
接下来再重新创建模块,就包含src/maven/java和src/main/resources这两个目录了!