Maven Archetype 多 Module 自定义代码脚手架
发布时间 - 2025-07-20 00:00:00 点击率:次大多数公司都有一个通用的模板项目,帮助你快速创建一个新项目。这种项目通常需要集成一些公司内部的中间件、单元测试、标准的代码格式和通用的代码分层等。
今天,我们将利用 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 的形式,注意是双下划线。
然后,module 中的互相引用 groupId 和 artifactId 按照父 pom 的方式对应修改。
修改 archetype-metadata
找到 META-INF/maven/archetype-metadata.xml 文件,修改 modules 相关的部分,重点注意 id、dir、name 的修改方式:
... ... src/main/java **/*.java
修改完成后,进入 target/generated-sources/arch 目录,执行以下命令:
etype
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,然后按照流程创建即可。
# apache
# cad
# ai
# red
# 中间件
# maven
# xml
# idea
# 自己的
# 很简单
# 都是
# 几个
# 这一
# 如果你
# 都有
# 也要
# 下划线
# 只需
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何创建自定义Facades?(详细步骤)
详解Huffman编码算法之Java实现
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
如何在云服务器上快速搭建个人网站?
iOS验证手机号的正则表达式
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
Bootstrap整体框架之JavaScript插件架构
EditPlus中的正则表达式 实战(2)
如何挑选最适合建站的高性能VPS主机?
html5的keygen标签为什么废弃_替代方案说明【解答】
Java遍历集合的三种方式
Internet Explorer官网直接进入 IE浏览器在线体验版网址
网站建设保证美观性,需要考虑的几点问题!
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
历史网站制作软件,华为如何找回被删除的网站?
zabbix利用python脚本发送报警邮件的方法
原生JS实现图片轮播切换效果
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Python数据仓库与ETL构建实战_Airflow调度流程详解
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何在云虚拟主机上快速搭建个人网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何快速搭建自助建站会员专属系统?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel如何实现数据库事务?(DB Facade示例)
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Python正则表达式进阶教程_复杂匹配与分组替换解析
使用Dockerfile构建java web环境
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何破解联通资金短缺导致的基站建设难题?
制作电商网页,电商供应链怎么做?
Laravel如何使用.env文件管理环境变量?(最佳实践)
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
网站制作报价单模板图片,小松挖机官方网站报价?
教你用AI润色文章,让你的文字表达更专业
Laravel PHP版本要求一览_Laravel各版本环境要求对照
教你用AI将一段旋律扩展成一首完整的曲子
如何在Windows虚拟主机上快速搭建网站?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
南京网站制作费用,南京远驱官方网站?
如何在IIS服务器上快速部署高效网站?

