Maven Archetype 自定义项目模板:高效开发的最佳实践
文章目录
- 前言
- 一、Maven Archetype
- 二、创建自定义 Maven Archetype
- 三、定制 Archetype 模板
- 四、手动创建 Archetype 模板项目
- 五、FAQ
- 5.1 如何删除自定义的模板
- 5.2 是否可以在模板中使用空文件夹
- 六、小结
- 推荐阅读
前言
在软件开发中,标准化和快速初始化项目结构能够显著提升开发效率。Maven Archetype 插件提供了创建自定义项目骨架模板的功能,使我们能够轻松生成预定义结构的项目。本文将详细介绍如何创建一个自定义的项目模板,从而提高日常的开发效率。
一、Maven Archetype
Maven Archetype 是一种用于生成项目结构的模板,可以帮助开发者快速创建一个预定义的项目骨架。Maven 自带了一些常见的 Archetype 模板,如 maven-archetype-quickstart、maven-archetype-webapp 等,但在实际开发中,我们可能需要根据团队的标准或个人喜好创建自定义的 Archetype。
二、创建自定义 Maven Archetype
-
在命令行使用
mvn archetype:generate
命令创建一个基础项目 -
将这个基础项目改造成我们需要的模板形式
-
使用
mvn archetype:create-from-project
命令将这个基础项目转换成模板。这个命令将在target/generated-sources
目录下生成一个名为 archetype 的项目。 -
使用
idea
打开target/generated-sources/archetype
项目,执行mvn clean install
命令将项目安装到本地 -
在命令行使用
mvn archetype:generate
命令,选择我们自定义的模板生成项目填写项目的基本信息
如果大家不熟悉使用命令行,可以直接在
idea
中使用模板创建项目不过这种方式不能选择模板,需要手动填写模板信息比较麻烦,大家可根据自身情况选择方案。
-
项目生成了,但是生成的项目存在一些额外的东西,我们先手动处理一下
-
打开项目,查看项目的工程结构
三、定制 Archetype 模板
刚才的模板中生成了额外的 .idea
目录,我们并不需要在模板中创建这个目录。此时,我们需要定制这个模板。我们可以打开之前生成的 archetype
项目。
在 archetype
项目中删掉我们不需要的模板和配置。
对该项目重新执行 mvn install
命令安装模板,之后使用模板创建的项目就不会有这个多余的目录了。
四、手动创建 Archetype 模板项目
我们还可以手动搭建一个 Archetype 模板项目。
-
新建一个 maven 项目
-
pom 文件中引入项目依赖
<!-- XML 文件的声明,指定了使用 XML 1.0 版本和 UTF-8 编码 --> <?xml version="1.0" encoding="UTF-8"?> <!-- 定义了 project 元素及其命名空间 --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>spring-boot-template-archetype</artifactId><version>1.0.0</version><!-- 项目的打包类型,这里是 maven-archetype,表示这是一个 Maven 原型项目 --><packaging>maven-archetype</packaging><!-- 项目的名称 --><name>spring-boot-template-archetype</name><build><extensions><extension><groupId>org.apache.maven.archetype</groupId><artifactId>archetype-packaging</artifactId><version>3.2.1</version></extension></extensions><pluginManagement><plugins><plugin><artifactId>maven-archetype-plugin</artifactId><version>3.2.1</version></plugin></plugins></pluginManagement></build> </project>
-
搭建工程结构
-
模板文件配置好之后,使用
mvn install
命令将模板安装到本地库
五、FAQ
5.1 如何删除自定义的模板
想要删除自定义的模板,非常简单。按如下步骤即可:
- 到本地库删除安装的项目即可。
- 执行
mvn archetype:crawl
命令,更新缓存
5.2 是否可以在模板中使用空文件夹
生成模板时并不支持空文件夹,如果遇到空文件夹在生成时会被忽略。如果想要目录,但是目录中又不知道放什么,可以放一个占位文件,例如创建一个名称为 .keep
的空文件。
六、小结
自定义 Maven Archetype 项目模板是提高开发效率和一致性的强大工具。通过遵循上述最佳实践,开发人员可以创建灵活、简洁且易于维护的项目模板,从而显著减少新项目的设置时间并提高开发效率。
推荐阅读
- 构建安全稳定的应用:Spring Security 实用指南
- 深入探究 Spring Boot Starter:从概念到实践
- 深入理解 Java 中的 volatile 关键字
- Spring 三级缓存
- 深入了解 MyBatis 插件:定制化你的持久层框架
相关文章:

Maven Archetype 自定义项目模板:高效开发的最佳实践
文章目录 前言一、Maven Archetype二、创建自定义 Maven Archetype三、定制 Archetype 模板四、手动创建 Archetype 模板项目五、FAQ5.1 如何删除自定义的模板5.2 是否可以在模板中使用空文件夹 六、小结推荐阅读 前言 在软件开发中,标准化和快速初始化项目结构能够…...

vue的ESLint 4格缩进 笔记
https://chatgpt.com/share/738c8560-5271-45c4-9de0-511fad862109 一,代码4格缩进设置 .eslintrc.js文件 module.exports { "rules": { "indent": ["error", 4] } }; 自动修复命令 npx eslint --fix "src/**/*.{…...

【前端项目笔记】8 订单管理
订单管理 效果展示: 在开发功能之前先创建分支order cls 清屏 git branch 查看所有分支(*代表当前分支) git checkout -b order 新建分支order git push -u origin order 将本地的当前分支提交到云端仓库origin中命名为order 通过路由方式…...
构建Yarn依赖树:深入解析与实践指南
构建Yarn依赖树:深入解析与实践指南 在现代JavaScript开发中,依赖管理是项目成功的关键。Yarn,作为Node.js生态系统中一个强大的包管理器,以其快速、可靠和安全的特性而闻名。本文将深入探讨Yarn如何构建依赖树,并提供…...

社区活动|FlowUs知识库的发展|先进技术的落地应用|下一代生产力工具你用了吗
在当今快速发展的数字化时代,技术的进步不断推动着工作方式和知识管理的革新。FlowUs,作为一款前沿的知识管理和协作平台,正站在这一变革的浪潮之巅,引领着智能工作的新潮流。 智能化的智能学习引导工具 FlowUs不仅仅是一个工具&…...

Python基础语法(与C++对比)(持续更新ing)
代码块 Python在统一缩进体系内,为同一代码块C{...}内部的为同一代码块 注释 Python 单行注释:#... 多行注释:... C 单行注释://... 多行注释: /*...*/ 数据类型 1. Python数据类型 Python中支持数字之间使用下划线 _ 分割…...

LeetCode-Leetcode 1120:子树的最大平均值
LeetCode-Leetcode 1120:子树的最大平均值 题目描述:解题思路一:递归解题思路二:0解题思路三:0 题目描述: 给你一棵二叉树的根节点 root,找出这棵树的 每一棵 子树的 平均值 中的 最大 值。 子…...
AI在软件开发中的角色:助手还是取代者?
目录 前言 一、AI工具现状:高效助手的崛起 二、AI对开发者的影响:新技能与竞争力的重塑 三、AI开发的未来:共生而非取代 写在最后 前言 随着科技的飞速发展,生成式人工智能(AIGC)在软件开发领域的应用日…...
jboss 7.2
链接: https://pan.baidu.com/s/19PSAy-Wy8DjcUMy94eqWnw 提取码: rgxf 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v3的分享链接: https://pan.baidu.com/s/19PSAy-Wy8DjcUMy94eqWnw 提取码: rgxf 复制这段内容后打开百度网盘手机App…...

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥生成介绍及算法规格】
密钥生成介绍及算法规格 当业务需要使用HUKS生成随机密钥,并由HUKS进行安全保存时,可以调用HUKS的接口生成密钥。 注意: 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harm…...

电气-伺服(4)CANopen
一、CAN Controller Area Network ,控制器局域网,80年的德国Bosch的一家公司研发可以测量仪器直接的实时数据交换而开发的一款串行通信协议。 CAN发展历史 二、CAN 的osi 模型 CAN特性: CAN 的数据帧 三、CANopen 什么是CANopen CANopen 的网络模型 …...

JavaFx基础知识
1.Stage 舞台 如此这样的一个框框,舞台只是这个框框,并不管里面的内容 public void start(Stage primaryStage) throws Exception {primaryStage.setScene(new Scene(new Group()));primaryStage.getIcons().add(new Image("/icon/img.png"))…...

学会python——用python制作一个登录和注册窗口(python实例十八)
目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.登录和注册窗口 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…...
Vue3+Element-plus的表单重置
作用:简化代码,重置表单数据 1.创建表单,绑定表单数据对象model,并且每一表单需要绑定prop <el-button type"primary" click"Formreset">重置</el-button> <el-form :inline"true" :model"fromModel" ref"form&q…...

pytorch中的contiguous()
官方文档:https://pytorch.org/docs/stable/generated/torch.Tensor.contiguous.html 其描述contiguous为: Returns a contiguous in memory tensor containing the same data as self tensor. If self tensor is already in the specified memory forma…...

Windows系统安装分布式搜索和分析引擎Elasticsearch与远程访问详细教程
文章目录 前言系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 前言 本文主要介绍如何在Windows系统安装分布式搜索和分析引擎Elasticsearch,…...

界面材料知识
界面材料是用于填充芯片和散热器之间的空隙,将低导热系数的空气挤出,换成较高导热系数的材料,以提高芯片散热能力。参考下图 图片来源网上 热阻是衡量界面材料性能最终的参数,其中与热阻有关的有: 1、导热系数&#x…...
【Git】远程仓库操作
创建远程仓库 在官网进行注册登录:Gitee或Github 进入后点击新建仓库,默认选项创建即可 **仓库创建完成后可以看到SSH的仓库地址:gitgitee.com:username/test.git**或gitgithub.com:Toukensan/test.git 配置SSH公钥 在本地通过命令行创建…...

clonezilla(再生龙)克隆物理机linux系统,然后再去另一台电脑安装
前言: 总共需要2个u盘,一个装再生龙系统,一个是使用再生龙把硬盘备份到另一个盘里面,恢复的时候,先使用再生龙引导,然后再插上盘进行复制 1.制作启动u盘 1.1下载再生龙Clonezilla 下載 1.2下载UltraISO(https://cn.ultraiso.net/uiso9_cn.exe) 1.3 打开UltraISO,选择co…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...