Maven Archetype 多 Module 自定义代码脚手架

发布时间 - 2025-07-20 00:00:00    点击率:

大多数公司都有一个通用的模板项目,帮助你快速创建一个新项目。这种项目通常需要集成一些公司内部的中间件、单元测试、标准的代码格式和通用的代码分层等。

今天,我们将利用 Maven 的 Archetype 插件来简化这一过程。

从上图可以清楚地看到,利用这个插件机制只需几个简单的步骤:

  1. archetype:create-from-project:根据自己的项目代码生成原型项目。
  2. 通过 install 等命令生成原型文件。
  3. 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 也要修改,groupIdartifactId 按照以下方式修改,不要写死:


    
        
            ${groupId}
            ${rootArtifactId}-client
            ${project.version}
        
        ... ...
    

修改 module

默认生成的 module 可能还是模板项目的名字,需要修改成类似 __rootArtifactId__-client 的形式,注意是双下划线。

然后,module 中的互相引用 groupIdartifactId 按照父 pom 的方式对应修改。

修改 archetype-metadata

找到 META-INF/maven/archetype-metadata.xml 文件,修改 modules 相关的部分,重点注意 iddirname 的修改方式:


    
        
            
                src/main/java
                
                    **/*.java
                
            
        
    
    ... ...

修改完成后,进入 target/generated-sources/archetype 目录,执行以下命令:

mvn install

顺便执行 mvn deploy 上传到 Nexus。

使用 Archetype

经过上述步骤,原型 Archetype 已经创建完成。最大的挑战在于前面的修改步骤,花费了大量时间。

接下来,我们看看如何使用 Archetype,有两种使用方式。

命令行使用

随便进入你想保存项目的路径,执行以下命令:

mvn archetype:generate -DarchetypeCatalog=local

依次按照提示输入 groupIdartifactId 即可完成创建。

让其他人使用

你的本地 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 的 GroupIdArtifactIdVersion 信息。

添加成功后,你就可以在列表中看到我们自己的 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服务器上快速部署高效网站?