当前位置: 首页 > article >正文

使用mvn archetype命令,构建自定义springboot archetype脚手架创建工程的方法

使用mvn archetype命令,构建自定义springboot archetype脚手架创建工程的方法

文章目录

  • 使用mvn archetype命令,构建自定义springboot archetype脚手架创建工程的方法
    • 一、背景
    • 二、环境
    • 三、archetype插件配置
    • 四、基于项目构建脚手架archetype包
    • 五、检查模板内容
      • 1. 删除不必要的log
      • 2. 将脚手架安装到本地仓
    • 六、安装自定义的archetype脚手架到本地仓
    • 七、用自定义的archetype脚手架创建项目
    • 总结

一、背景

“脚手架”这个词可能在前端开发比较流行,后端相对的概念提的比较少,但创建过springboot项目的都知道有个spring initializr可以辅助创建工程结构,这种工具+模板工程可以理解为“脚手架”。基于mvn archetype命令,我们可以自己定义项目模板,开发者可以一键生成具有特定结构和配置的项目,极大地简化了项目创建的繁琐过程。自定义模板工程的在于,它将源工程转化为模板工程,通过替换特定字符串或文件名为占位符,从而实现工程的快速克隆与定制。这一过程简单的说可以分为三步:模板的创建、模板发布与应用。

二、环境

  • win 10
  • Apache Maven 3.3.9
  • Java version: 17.0.9

三、archetype插件配置

mvn archetype默认不会对yml文件进行替换,ruapplication.yml中的spring.application.name属性的动态变更。
如需替换需要在模板项目中添加插件,使用archetypeFilteredExtentions配置可以替换的文件后缀,之后在使用archetype保留的占位符,才能正常生效。

<!-- 脚手架archetype原型插件 -->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.1.2</version><configuration><propertyFile>archetype.properties</propertyFile><encoding>UTF-8</encoding><archetypeFilteredExtentions>java,xml,yml,properties</archetypeFilteredExtentions></configuration>
</plugin>

四、基于项目构建脚手架archetype包

  • 进入项目根目录执行命令,构建archetype脚手架代码模板
cd /d E:\temp\my-demo
mvn clean archetype:create-from-project 

五、检查模板内容

1. 删除不必要的log

检查下目录下是否有构建时产生的日志文件,将无用文件删除,包括一些本地调试用的配置文件。

2. 将脚手架安装到本地仓

  • 首先需要修改pom.xml中的maven坐标
    构建成功后进入archetype目录,将pom.xml中的maven坐标修改为自己项目坐标:
    cd E:\temp\my-demo\target\generated-sources\archetype
  <groupId>com.demo.archetype.my-demo</groupId><artifactId>my-demo-archetype</artifactId><version>1.0.0</version><packaging>maven-archetype</packaging><name>脚手架模板</name>
  • 修改application.xml的appname:
    进入E:\temp\my-demo\target\generated-sources\archetype\src\main\resources\archetype-resources\src\main\resources目录,
    打开application.yml文件,修改name属性为${artifactId}占位符。
spring:application:name: ${artifactId}
  • 常用占位符如下:
 _rootArtifactId_ :做文件夹名替换用,例如_rootArtifactId_-dao, 占位符来动态获取父工程的ArtifactId${rootArtifactId} : 它保存用户输入的值作为项目名(maven在用户运行原型时在提示符中询问为artifactid:的值)${artifactId}  :如果您的项目由一个模块组成,则此变量的值将与${rootArtifactId}相同,但如果项目包含多个模块,则此变量将由每个模块文件夹中的模块名替${package} : 用户为项目提供的包,也在用户运行原型时由maven提示${packageInPathFormat} : 与${package}变量的值相同,但将“.”替换为字符“/”,例如:,对于包com.aurora.demo,此变量为com/aurora/demo${groupId}  :用户为项目提供的groupid,在用户运行原型时由maven提示${version}  :版本号

六、安装自定义的archetype脚手架到本地仓

上步修改了pom中的maven坐标,此处可以直接执行mvn install命令,安装到本地仓。

cd E:\temp\my-demo\target\generated-sources\archetype
#pom坐标修改后直接安装到本地仓
mvn clean install -DskipTests
#未修改pom文件,或想自定maven坐标,可以加入以下参数
mvn clean install -DskipTests ^
-DgroupId=com.demo.archetype.my-demo  ^
-DartifactId=my-demo-archetype  ^
-Dversion=1.0.0 ^
-Dpackaging=jar 

七、用自定义的archetype脚手架创建项目

cd /d E:\mvn-temp
#创建项目
mvn archetype:generate ^
-B -e -X ^
-DgroupId=com.demo ^
-DartifactId=mydemo ^
-Dversion=1.0.0-SNAPSHOT ^
-Dpackage=com.demo.crp ^
-DarchetypeGroupId=com.demo.archetype.my-demo ^
-DarchetypeArtifactId=my-demo-archetype ^
-DarchetypeVersion=1.0.0 ^
-DarchetypeCatalog=local ^
-DinteractiveMode=false
  • 参数说明
mvn archetype:generate ^
#-e打印错误信息,-X打印debug信息
-B -e -X ^
#新建项目的maven坐标 ^
-DgroupId=com.demo ^
-DartifactId=mydemo ^
-Dversion=1.0.0-SNAPSHOT ^
-Dpackage=com.demo.crp ^
#自定义脚手架的maven坐标 ^
-DarchetypeGroupId=com.demo.archetype.my-demo ^
-DarchetypeArtifactId=my-demo-archetype ^
-DarchetypeVersion=1.0.0 ^
#其它生成参数 ^
-DarchetypeCatalog=local ^
-DinteractiveMode=false

总结

以上是基于本地仓构建archetype脚手架及使用脚手架创建项目的方法,也可以使用mvn deploy发布到私服,统一团队的编码风格。

相关文章:

使用mvn archetype命令,构建自定义springboot archetype脚手架创建工程的方法

使用mvn archetype命令&#xff0c;构建自定义springboot archetype脚手架创建工程的方法 文章目录 使用mvn archetype命令&#xff0c;构建自定义springboot archetype脚手架创建工程的方法一、背景二、环境三、archetype插件配置四、基于项目构建脚手架archetype包五、检查模…...

Hutool RedisDS:Java开发中的Redis极简集成与高阶应用

在Java开发中&#xff0c;Redis作为高性能内存数据库&#xff0c;广泛应用于缓存、分布式锁等场景。然而原生的客户端操作涉及连接管理、序列化等繁琐细节。Hutool工具包提供的RedisDS模块&#xff0c;通过高度封装显著简化了这一过程。本文从实战角度解析其核心特性与使用技巧…...

MacOS 15.3.1 安装 GPG 提示Error: unknown or unsupported macOS version: :dunno

目录 1. 问题锁定 2. 更新 Homebrew 3. 切换到新的 Homebrew 源 4. 安装 GPG 5. 检查 macOS 版本兼容性 6. 使用 MacPorts 或其他包管理器 7. 创建密钥&#xff08;生成 GPG 签名&#xff09; 往期推荐 1. 问题锁定 通常是因为你的 Homebrew 版本较旧&#xff0c;或者你…...

Sqlmap注入工具简单解释

安装 1. 安装 Python SQLMap 是基于 Python 开发的&#xff0c;所以要先安装 Python 环境。建议安装 Python 3.9 或更高版本&#xff0c;可从 Python 官方网站 下载对应操作系统的安装包&#xff0c;然后按照安装向导完成安装。 2. 获取 SQLMap 可以从 SQLMap 的官方 GitHu…...

硬件驱动——51单片机:独立按键、中断、定时器/计数器

目录 一、独立按键 1.原理 2.封装函数 3.按键控制点灯 数码管 二、中断 1.原理 2.步骤 3.中断寄存器IE 4.控制寄存器TCON 5.打开外部中断0和1 三、定时器/计数器 1.原理 2.控制寄存器TCON 3.工作模式寄存器TMOD 4.按键控制频率的动态闪烁 一、独立按键 1…...

语文-文言文

文章目录 短歌行归园田居梦游天姥吟留别 / 别东鲁诸公 学习文言文&#xff0c;适当个人分析&#xff1b; 短歌行 曹操 对酒当歌&#xff0c;人生几何&#xff08;主题&#xff0c;人生很短暂&#xff09;&#xff1b; 譬如朝露&#xff0c;去日苦多&#xff08;比喻&#xff0c…...

P1259 黑白棋子的移动【java】【AC代码】

有 2n 个棋子排成一行&#xff0c;开始为位置白子全部在左边&#xff0c;黑子全部在右边&#xff0c;如下图为 n5 的情况&#xff1a; 移动棋子的规则是&#xff1a;每次必须同时移动相邻的两个棋子&#xff0c;颜色不限&#xff0c;可以左移也可以右移到空位上去&#xff0c;但…...

【极光 Orbit·STC8AH】04. 深度探索 GPIO 底层逻辑

【极光 OrbitSTC8A&H】04. 深度探索 GPIO 底层逻辑 引言&#xff1a;当代码遇见硬件 上周我看着学生调试的工控产品&#xff0c;他们困惑地盯着自己编写的代码&#xff1a;“老师&#xff0c;这段C语言明明在PC上跑得没问题啊&#xff01;” &#xff0c;让我想起自己初学…...

67.Harmonyos NEXT 图片预览组件之性能优化策略

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; Harmonyos NEXT 图片预览组件之性能优化策略 文章目录 Harmonyos NEXT 图片预览组件之性能优化策略效果预览一、性能优化概述1. 性能优化的关键指标…...

uni-app+SpringBoot: 前端传参,后端如何接收参数

做项目中的一些小经验&#xff0c;方便后续 &#xff08;1&#xff09;前端代码中&#xff0c;请求的 URL 是通过查询参数&#xff08;?id${articleId}&#xff09;传递的 后端接口&#xff1a; GetMapping("/knowledgeDetail") public Result getKnowledgeByid(R…...

【Vue.js】

一、简介 1、概述 官网GitHub - Vuejs Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 Vue.js作为一个渐进式框架&#xff0c;其设计理…...

正则表达式入门及常用的正则表达式

正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种强大的文本处理工具&#xff0c;用于匹配、查找和替换字符串中的特定模式。以下是入门指南和常用正则表达式示例&#xff1a; 一、正则表达式入门 1. 基本语法 符号说明示例.匹配任意单个字…...

Windows下安装Git客户端

① 官网地址&#xff1a;https://git-scm.com/。 ② Git的优势 大部分操作在本地完成&#xff0c;不需要联网&#xff1b;完整性保证&#xff1b;尽可能添加数据而不是删除或修改数据&#xff1b;分支操作非常快捷流畅&#xff1b;与Linux 命令全面兼容。 ③ Git的安装 从官网…...

SAP IBP for Supply Chain Certification Guide (Parag Bakde, Rishabh Gupta)

SAP IBP for Supply Chain Certification Guide (Parag Bakde, Rishabh Gupta)...

【计算机网络通信 AMQP】使用 Qt 调用 qamqp 库进行 AMQP 通信

以下是一个使用 Qt 实现 AMQP 通信的代码示例。为了实现这个功能&#xff0c;我们可以使用 qamqp 库&#xff0c;它是一个基于 Qt 的 AMQP 客户端库。首先&#xff0c;你需要将 qamqp 库添加到你的 Qt 项目中&#xff0c;可以通过 qmake 或 CMake 进行配置。 #include <QCo…...

C语言中的指针与数组:概念、关系与应用

指针和数组都是C语言中极其重要的概念,本文将分步骤深入分析指针和数组在C语言中的概念、它们之间的关系以及它们在实际编程中的应用。 一、指针与数组的基本概念详解 1.1 指针详解 指针是一个变量,它存储的是另一个变量的内存地址。理解指针的核心就是“内存地址”,指针…...

如何处理PHP中的日期和时间问题

如何处理PHP中的日期和时间问题 在PHP开发中&#xff0c;日期和时间的处理是一个常见且重要的任务。无论是记录用户操作时间、生成时间戳&#xff0c;还是进行日期计算&#xff0c;PHP提供了丰富的函数和类来帮助开发者高效处理这些需求。本文将详细介绍如何在PHP中处理日期和…...

TDengine 使用最佳实践

简介 阅读本文档需要具备的基础知识&#xff1a; Linux系统的基础知识&#xff0c;及基本命令网络基础知识&#xff1a;TCP/UDP、http、RESTful、域名解析、FQDN/hostname、hosts、防火墙、四层/七层负载均衡 本文档的阅读对象有&#xff1a;架构师、研发工程师&#xff0c;…...

Spring、Spring Boot、Spring Cloud 的区别与联系

1. Spring 框架 定位&#xff1a;轻量级的企业级应用开发框架&#xff0c;核心是 IoC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。 核心功能&#xff1a; 依赖注入&#xff08;DI&#xff09;&#xff1a;通过 Autowired、Component 等注解…...

AutoGen-构建问答智能体

概述 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 环境说明 python&#xff0c;3.10AutoGen&#xff0c;0.4.2…...

C语言实现括号匹配检查及栈的应用详解

目录 栈数据结构简介 C语言实现栈 栈的初始化 栈的销毁 栈的插入 栈的删除 栈的判空 获取栈顶数据 利用栈实现括号匹配检查 总结 在编程中&#xff0c;经常会遇到需要检查括号是否匹配的问题&#xff0c;比如在编译器中检查代码的语法正确性&#xff0c;或者在…...

C语言中的字符串与数组的关系

在C语言中,字符串和数组之间有着紧密的关系。理解它们的区别和联系对于编写高效且可靠的代码至关重要。在本篇博文中,我们将详细分析字符串和数组在C语言中的概念、它们的关系以及如何在编程中应用它们。 一、字符串与数组的基础知识 1.1 数组概念 在C语言中,数组是一组相…...

阿里云魔笔低代码应用开发平台快速搭建教程

AI低代码&#xff0c;大模型时代应用开发新范式 什么是魔笔 介绍什么是魔笔低代码应用开发平台。 魔笔是一款面向全端&#xff08;Web、H5、全平台小程序、App&#xff09;场景的模型驱动低代码开发平台&#xff0c;提供一站式的应用全生命周期管理&#xff0c;包括可视化开发…...

A Survey on Mixture of Experts 混合专家模型综述(第二部分:混合专家系统设计)

A Survey on Mixture of Experts 混合专家模型综述 (第一部分&#xff1a;混合专家算法设计) A Survey on Mixture of Experts arxiv github&#xff1a;A-Survey-on-Mixture-of-Experts-in-LLMs ​ ​ ​ 5 System Design of Mixture of Experts While ​Mixture of Exper…...

docker python:latest镜像 允许ssh远程

跳转到家目录 cd创建pythonsshdockerfile mkdir pythonsshdockerfile跳转pythonsshdockerfile cd pythonsshdockerfile创建Dockerfile文件 vim Dockerfile将Dockerfile的指令复制到文件中 # 使用 python:latest 作为基础镜像 # 如果我的镜像列表中没有python:latest镜像&…...

通过 CSS 的 命名页面(Named Pages) 技术实现作用域隔离,实现 @page 样式仅影响当前组件

以下是实现 page 样式仅影响当前组件的完整解决方案&#xff0c;通过 CSS 的 命名页面&#xff08;Named Pages&#xff09; 技术实现作用域隔离&#xff1a; vue <template><div><button v-print"printOptions">打印当前报表</button><…...

Aim Robotics电动胶枪:机器人涂胶点胶的高效解决方案

在自动化和智能制造领域&#xff0c;机器人技术的应用越来越广泛&#xff0c;而涂胶和点胶作为生产过程中的重要环节&#xff0c;也逐渐实现了自动化和智能化。Aim Robotics作为一家专注于机器人技术的公司&#xff0c;其推出的电动胶枪为这一领域带来了高效、灵活且易于操作的…...

动态规划----完全平方数(3种写法,逐步简化)

题目链接&#xff1a;完全平方数 完全平方数可以认为是完全背包问题。每一个平方小于n的平方数都是物品&#xff0c;而完全平方数之和n就是背包容量。每一个平方和都可以无限次使用。 写法1&#xff1a;把所有小于n的平方数存入数组nums,使用二维dp数组。 递推公式的推导可以…...

C#中通过Response.Headers设置自定义参数

一、基础设置方法 1. 直接添加自定义头 // ASP.NET Core方案 Response.Headers.Append("X-API-Version", "2.3.1"); Response.Headers.Append("Custom-Auth-Token", Guid.NewGuid().ToString());• 底层原理&#xff1a;通过IHeaderDictionary…...

【HDLbits--分支预测器简单实现】

HDLbits--分支预测器简单实现 1 timer2.branche predicitors3.Branch history shift4.Branch direction predictor 以下是分支预测器的简单其实现&#xff1b; 1 timer 实现一个计时器&#xff0c;当load1’b1时&#xff0c;加载data进去&#xff0c;当load1’b0时进行倒计时&…...