idea生成自定义Maven原型(archetype)项目工程模板
一、什么是Maven原型(Maven archetype)
引自官网的介绍如下:
Maven原型插件官网地址
这里采用DeepSeek助手翻译如下:
Maven 原型
什么是原型?
简而言之,原型是一个 Maven 项目模板工具包。原型被定义为一种原始模式或模型,同类的所有其他事物都是由此衍生而来。这个名字很贴切,因为我们试图提供一个系统,该系统能以一致的方式生成 Maven 项目。原型将帮助作者为用户创建 Maven 项目模板,并为用户提供生成这些项目模板的参数化版本的方法。
使用原型提供了一种很好的方式,能让开发人员以与项目或组织采用的最佳实践相一致的方式快速上手。在 Maven 项目中,我们使用原型,通过提供一个示例项目,来尽可能快地让我们的用户启动并运行项目。这个示例项目展示了 Maven 的许多特性,同时向新用户介绍 Maven 所采用的最佳实践。新用户在几秒钟内就可以拥有一个可运行的 Maven 项目,以此作为跳板来进一步研究 Maven 的更多特性。我们还努力使原型机制具有可添加性,也就是说,允许将项目的一部分捕获到一个原型中,这样项目的某些部分或方面就可以添加到现有项目中。一个很好的例子就是 Maven 站点原型。例如,如果你已经使用了快速入门原型来生成一个可运行的项目,那么你可以通过在这个现有项目中使用站点原型,快速为该项目创建一个站点。你可以使用原型做任何类似这样的事情。
你可能希望在你的组织内规范 J2EE 开发,所以你可能想要为 EJB、WAR 或者你的 Web 服务提供原型。一旦这些原型被创建并部署到你组织的资源库中,组织内的所有开发人员都可以使用它们。
个人理解,Maven原型就是用于生成可自定义的,包含公用所需要的,能直接运行使用的Maven项目模板。是为了后续能帮助开发者更快速的生成和模板一致的项目工程,使得用户不需要重新整理项目骨架,直接使用默认的模板骨架,或在模板骨架上做修改即可。
二、Maven原型(Maven archetype)应用
1.在项目pom.xml文件中引入maven-archetype-plugin原型插件
这里我通常找Maven依赖的仓库地址如下,便于选择对应的版本:
https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-archetype-plugin
首先,找到自己要作为脚手架模板的项目,或者自己新建项目,然后自定义项目骨架目录,创建基础配置以及工具类等等。然后在项目pom.xml中加入maven-archetype-plugin插件。
这里我先使用idea开发工具创建Java项目,然后自定义修改项目骨架,加入子项目目录,构成简单的聚合项目。项目结构如下图:
聚合项目展开后骨架目录截图:
在项目父级pom.xml文件中加入maven-archetype-plugin插件,这里我选的是最新版本3.3.1,版本看情况选择就好,如下图:
2.使用Maven原型(archetype)打包构建Maven原型项目
构建命令如下:
archetype:create-from-project
Maven官网介绍:
此命令目标读取您的源文件和资源文件、其参数值以及您在.property文件中指定的属性,并使用它们使用Maven原型打包创建Maven原型项目。如果你构建了最终的项目,它将创建原型。然后,您可以使用此原型创建与原始项目类似的新项目。
命令说明-引自官网介绍如下:
Maven官网介绍archetype:create-from-project命令地址
archetype:create-from-project命令:表示从当前项目创建原型项目。
点击idea右侧maven图标,打开maven面板,选择父级工程名,找到插件,选择archetype:create-from-project命令,直接双击该命令,命令执行完后,会在父级项目目录下生成target目录。如下图:
archetype:create-from-project命令执行成功截图如下:
命令执行成功后,在父级根目录下,会生成target目录文件(也就是自己自定义的项目脚手架工程)。如下图:
最后我们可以把生成的脚手架项目模板加入到Maven中,便于后续创建项目时,可直接选择,来生成自定义的Maven模板项目,方便后续开发搭建项目工程。
3.添加项目模板到Maven中
找到target目录 -> generated-source -> archetype目录。如下图:
再使用idea打开archetype目录。如下图:
打开Maven面板,并执行install命令
install命令执行成功之后,执行archetype:crawl命令,此时Maven会搜索并更新本地或远程仓库中的archetype。
archetype:crawl
archetype:crawl命令的主要作用是搜索并更新仓库中的archetype。
具体来说,当你执行mvn archetype:crawl命令时,Maven会搜索并更新本地或远程仓库中的archetype。
这个命令的作用包括:
- a.搜索仓库中的archetype:Maven会遍历仓库中的所有archetype,找到所有可用的模板。
- b.更新archetype目录:根据搜索结果,更新本地仓库中的archetype目录,生成或更新archetype-catalog.xml文件,该文件包含了仓库中所有可用的archetype信息。
此时会在本地Maven仓库里生成archetype-catalog.xml原型目录配置文件如下:
archetype-catalog Maven官网配置说明
C:\Users\18292\.m2\repository\archetype-catalog.xml
archetype-catalog.xml是标准的目录文件,其中包含有关原型的信息,以便用户可以从任意数量的目录中获得原型列表以生成新项目。
生成的archetype-catalog.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 https://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><archetypes><archetype><groupId>com.learn</groupId><artifactId>learn-project-archetype</artifactId><version>1.0-SNAPSHOT</version><description>learn-project</description></archetype></archetypes>
</archetype-catalog>
三、测试使用idea工具构建新Maven项目
idea创建项目,File -> New -> Project。如下图:
a.选择Maven原型方式创建项目
b.自定义项目名称
c.指定项目存放目录
d.添加自定义的原型项目模板,在弹窗中填写上面生成的archetype-catalog.xml文件中原型项目的内容,点击Add添加。
点击创建按钮后,直接使用idea打开,等待Maven加载,加载完成后,会直接生成和自定义模板项目一样结构的Maven项目。如下图:
至此,使用Maven原型构建自定义项目模板完成。有个情况是,每次创建Maven项目,都需要手动添加本地的Archetype项目原型才可以创建。
针对这个问题,我们可以这样处理,在创建项目时,更改Catalog选项,直接选择自己本地原型配置文件。首先点击Manage catalogs按钮,添加本地自定义生成的archetype-catalog.xml配置文件。如下图:
配置好后,在Catalog配置上,我们选择我们刚添加的archetype-catalog.xml配置,会自动在下面Archetype下拉选择中列出我们自己的原型配置,直接选择,然后点击Create创建按钮,就可以生成对应的模板项目。如下图:
如此,后续创建新Maven项目时,就可以直接选择我们自定义的项目模板,来构建新项目了,便于项目框架统一管理,便于后续新项目的开发和维护。
参考博文:
Maven仓库官方地址【首选】
Maven中央仓库地址大全
maven仓库的地址
阿里云云效 Maven
idea创建java的maven聚合工程
maven之自定义archetype
在 Idea 选择自己的 Archetype 创建项目
Maven依赖管理项目构建工具
Maven安装本地的jar包和创建带模板的自定义项目
架构师必备技能:Maven Archetype生成项目模板
项目模板脚手架搭建
maven中自定义MavenArchetype的实现
相关文章:

idea生成自定义Maven原型(archetype)项目工程模板
一、什么是Maven原型(Maven archetype) 引自官网的介绍如下: Maven原型插件官网地址 这里采用DeepSeek助手翻译如下: Maven 原型 什么是原型? 简而言之,原型是一个 Maven 项目模板工具包。原型被定义为一…...

Redis面试常见问题——使用场景问题
目录 Redis面试常见问题 如果发生了缓存穿透、击穿、雪崩,该如何解决? 缓存穿透 什么是布隆过滤器? 缓存击穿 缓存雪崩 双写一致性(redis做为缓存,mysql的数据如何与redis进行同步呢?) …...
样式和ui(待更新)
element-plus 先在项目下执行安装语句执行按需导入的命令按照官方文档修改vitest.json sass样式定制 npm -i sass -D在项目下准备定制的样式文件 styles/element/index.scss(!注意这里是.scss文件在vitest.json 修改配置文件 Components({resolvers: [ElementPlusResolver(…...

大摩闭门会:250228 学习总结报告
如果图片分辨率不足,可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录,进行学习讨论使用...

线程(Thread)
一、概念 线程:线程是一个轻量级的进程 二、线程的创建 1、线程的空间 (1)进程的空间包括:系统数据段、数据段、文本段 (2) 线程位于进程空间内部 (3) 栈区独享、与进程共享文本段、…...
AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命
AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命 ——一场重塑人类认知边界的技术战争 一、OpenAI的“感性觉醒”:GPT-4.5的颠覆与争议 1.1 从“冷面学霸”到“温柔导师”:AI的情商跃迁 当用户输入“朋友放鸽子&…...

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...
Java进阶——常用工具类
日常开发中,Arrays、Collections 和 Objects 是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。 本文目录 一、 Arrays数组转集合并行排序优化Stream 支持 二、 Colle…...

【考试大纲】高级系统架构设计师考试大纲
目录 引言一、 考试说明1.考试目标2.考试要求3.考试科目设置二、 考试范围考试科目1:系统架构设计综合知识考试科目2:系统架构设计案例分析考试科目3:系统架构设计论文引言 最新的系统架构设计师考试大纲出版于 2022 年 11 月,本考试大纲基于此版本整理。 一、 考试说明…...
上位机知识篇---四种CPU架构交叉编译
文章目录 前言一、四种 CPU 架构1. x86/x86_64指令集位宽:应用场景编译工具 2. ARM指令集位宽:应用场景编译工具 3. MIPS指令集位宽应用场景编译工具 4. RISC-V指令集位宽应用场景编译工具 二、交叉编译1. 什么是交叉编译?定义应用场景 2. 交…...
隐式转换为什么导致索引失效
SELECT * FROM users WHERE id 123;这条语句失效的原因就是id是int类型的主键,比较的时候把id从int转化为字符串来比较了,而字符串的比较规则和int的比较规则明显不同,字符串是字典序比较的,还涉及到数据的长度,那为什…...

【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...

SpringBoot @Value 注解使用
Value 注解用于将配置文件中的属性值注入到Spring管理的Bean中。 1. 基本用法 Value 可以直接注入配置文件中的属性值。 配置文件 (application.properties 或 application.yml) 配置文件定义需要注入的数据。 consumer:username: lisiage: 23hobby: sing,read,sleepsubje…...

Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言安装JDK 17创建Spring Boot 项目 方式1:网页在线生成方式2&#…...

高频 SQL 50 题(基础版)_1667. 修复表中的名字
高频 SQL 50 题(基础版)_1667. 修复表中的名字 select user_id ,concat(upper(substring(name,1,1)),lower(substring(name,2))) as name from Users order by user_id...

Windwos10 系统没有微软商店(Microsoft Store)怎么办?
操作方法 管理员身份打开power shell , 输入 Get-AppxPackage -AllUsers Microsoft.WindowsStore* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “ ( ( (_.InstallLocation)\AppXManifest.xml”} 按下enter按键,就OK了...
c++同步机制
总结 多线程访问共享数据时需要加锁 多线程数据竞争 假如有一个变量shared_variable被10个线程共享,每个线程在循环中对shared_variable进行 1000 次累加操作,我们期望最终值为10000。 #include <iostream> #include <thread> #include …...
RuoYi框架介绍,以及如何基于Python使用RuoYi框架
若依框架(RuoYi)是一款基于Spring Boot和Vue.js的开源快速开发平台,广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具,帮助开发者快速搭建后台管理系统。 主要特点 前后端分离:前端采用Vue.js&#x…...

Go 语言环境安装
1.go官网下载安装包 All releases - The Go Programming Language 双击安装,一路下一步 2.安装完后查看版本 打开cmd 输入 以下 ,查看语言版本 go version 查看环境变量是否自动设置成功...

vector 面试点总结
ps:部分内容使用“AI”查询 一、入门 1、什么是vector 动态数组容器,支持自动扩容、随机访问和连续内存存储。 2、怎么创建-初始化vector std::vector<int> v; // 创建空vectorstd::vector<int> v {1, 2, 3}; // 直接初始化std::vec…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...