大多数公司都有一个通用的模板项目,帮助你快速创建一个新项目。这种项目通常需要集成一些公司内部的中间件、单元测试、标准的代码格式和通用的代码分层等。
今天,我们将利用 Maven 的 Archetype 插件来简化这一过程。
从上图可以清楚地看到,利用这个插件机制只需几个简单的步骤:
-
archetype:create-from-project:根据自己的项目代码生成原型项目。 - 通过
install等命令生成原型文件。 -
archetype:generate:通过原型生成目标项目。
看起来很简单,但如果你按照网上找到的资料操作,你会发现生成的项目可能不够理想,甚至包括官方文档也无法完全解决问题。步骤似乎很简单,但实际上会遇到许多问题,比如 module 名称不会变化、包名改变后代码中未更新,依赖报错等。
接下来,我们详细说明如何创建和使用 Archetype。
创建 Archetype
首先,准备好我们自己的模板项目,确保代码都是正确的。
进入项目根目录,执行以下命令:
mvn archetype:create-from-project
执行后,项目根目录下会生成 target 文件夹。这个步骤很简单,不会有任何障碍。请注意每个模块的名字,我已经对其进行了修改。
这里最关键的部分是如何修改 target/generated-sources/src/main/resources/archetype-resources 下的文件。
如果不进行修改,直接继续的话,最终生成的项目会发现 module 的名称不会变化,包名也不会更新,代码中引用的依赖会出现大量错误。
接下来,我们看看如何修改这些问题。
修改父 pom
首先,找到根目录的 pom 文件,会发现缺少 module 信息,必须添加以下内容:
${rootArtifactId}-client ${rootArtifactId}-common ${rootArtifactId}-service ${rootArtifactId}-facade ${rootArtifactId}-starter
父 pom 中引用的每个 module 也要修改,groupId 和 artifactId 按照以下方式修改,不要写死:
... ... ${groupId} ${rootArtifactId}-client ${project.version}
修改 module
默认生成的 module 可能还是模板项目的名字,需要修改成类似 __rootArtifactId__-client 的形式,注意是双下划线。
citySHOP是一款集CMS、网店、商品、系统,管理更加科学快速;全新Jquery前端引擎;智能缓存、图表化的数据分析,手机短信营销;各种礼包设置、搭配购买、关联等进一步加强用户体验;任何功能及设置都高度自定义;MVC架构模式,代码严禁、规范;商品推荐、促销、礼包、折扣、换购等多种设置模式;商品五级分类,可自由设置分类属性;商品展示页简介大方,清晰,图片自动放大,无需重开页面;商品评价、咨询分开
然后,module 中的互相引用 groupId 和 artifactId 按照父 pom 的方式对应修改。
修改 archetype-metadata
找到 META-INF/maven/archetype-metadata.xml 文件,修改 modules 相关的部分,重点注意 id、dir、name 的修改方式:
... ... src/main/java **/*.java
修改完成后,进入 target/generated-sources/archetype 目录,执行以下命令:
mvn install
顺便执行 mvn deploy 上传到 Nexus。
使用 Archetype
经过上述步骤,原型 Archetype 已经创建完成。最大的挑战在于前面的修改步骤,花费了大量时间。
接下来,我们看看如何使用 Archetype,有两种使用方式。
命令行使用
随便进入你想保存项目的路径,执行以下命令:
mvn archetype:generate -DarchetypeCatalog=local
依次按照提示输入 groupId、artifactId 即可完成创建。
让其他人使用
你的本地 Maven 仓库目录(比如 ~/.m2/repository)有一个文件 archetype-catalog.xml,共享给其他人即可。
com.example template-archetype 1.0.0-SNAPSHOT Example Project
在 IDEA 中使用
在 IDEA 中新建项目,选择 Maven,勾选 "Create from archetype",然后选择 "Add Archetype..."。
接着,输入我们自定义的 Archetype 的 GroupId、ArtifactId、Version 信息。
添加成功后,你就可以在列表中看到我们自己的 archetype,然后按照流程创建即可。









