把项目打包成Maven Archetype(多模块项目脚手架)

news/2024/5/19 20:37:34

1、示例项目

在这里插入图片描述

2、在pom.xml中添加archetype插件

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.2.0</version>
</plugin>

3、打包排除某些目录

当我们使用maven-archetype-plugin 插件基于当前项目生成一个 archetype 模板项目时,默认的该插件会把当前项目下所有的文件都会打包到 jar包中。很多时候我们希望在 build 的时候能过滤一些非必要的文件目录,如 .idea、项目 README.md 说明文件等等,这时候我们需要在构建的时候,配置一个 archetype.properties 文件参数,并在其中定义 excludePattern 属性来过滤文件或目录。

在项目目录下创建archetype.properties,内容如下:

# 打包过滤文件
excludePatterns=.idea/*,.git,*.iml,.idea/

excludePatterns 可以指定多个过滤条件,以英文逗号分割即可,不过需要注意的是,如果想过滤整个目录,如 .idea 目录,需要配置为: .idea/* 而不能仅填写为 idea。

4、包含.gitignore

# 注意__是2个下划线
把.gitignore重命名为__gitignore__

在上面的archetype.properties中加入gitignore=.gitignore

5、进入示例项目,执行以下命令

mvn archetype:create-from-project --settings D:\DevelopTools\apache-maven-3.6.3\conf\settings.xml -Darchetype.properties=archetype.properties

运行完后会在target目录生成模板
在这里插入图片描述
因为我这项目的主目录与子目录前缀不一样,所以生成的模板要手工替换,如果一样的话会自动替换为__rootArtifactId__
在这里插入图片描述
自动替换的示例:
在这里插入图片描述
既然不能自动替换那就手工更改

6、替换占位符

接着要替换占位符,比如每个项目名字不一样,上述moyu要替换成项目名,每个项目package前缀不一样,也要替换;

常用占位符如下:

占位符含义
__rootArtifactId__做文件夹名替换用,注意__是双下划线,例如__rootArtifactId__-dao, 占位符来动态获取父工程的ArtifactId
${rootArtifactId}保存用户输入的值作为项目名(maven在用户运行原型时在提示符中询问为artifactid:的值)
${artifactId}如果您的项目由一个模块组成,则此变量的值将与${rootArtifactId}相同,但如果项目包含多个模块,则此变量将由每个模块文件夹中的模块名替换
${package}用户为项目提供的包,也在用户运行原型时由maven提示
${packageInPathFormat}${package}变量的值相同,但将“.”替换为字符“/”,例如对于包com.foo.bar,此变量为com/foo/bar
${groupId}用户为项目提供的groupid,在用户运行原型时由maven提示
${version}用户为项目提供的版本号,在用户运行原型时由maven提示

首先替换module的名字,把moyu替换成__rootArtifactId__,注意两边是两个下划线
在这里插入图片描述
接着依次点开每一个编译后的文件,查看一下有没有没替换的占位符,正常编译好的,动态部分都会替换掉,如下图:
在这里插入图片描述
再查找项目中其它与示例项目moyu有关的项,改为对应的占位符,如下这些依赖
在这里插入图片描述
替换后的效果
在这里插入图片描述
找到项目中的每一个文件都要全替换成占位符

但是也会有一些替换错的,有时候package前缀和groupId一样时,一些package会被替换成groupId,我们要手动修正它;

当前项目里,这个application.yml就没有被替换掉
在这里插入图片描述
替换成以下内容:
在这里插入图片描述
接着是核心文件:archetype-metadata.xml
在这里插入图片描述

找到modules节点,每个modules都要替换,module属性介绍:
​ id:子模块工程的artifactId
​ dir:子模块工程源文件在archetype-resources里对应的directory
​ name :子模块的名字.,可定制化自己的服务模块。

在这里插入图片描述
替换如下:
在这里插入图片描述
如果有其他自定义参数,比如项目中的xxx和类名中的Xxx需要替换,可以自定义参数,自定义参数在archetype-metadata.xml里加入<requiredProperties>
key是属性名,defaultValue时默认名

 <!--属性变量定义--><requiredProperties><requiredProperty key="appName"><defaultValue>szcz</defaultValue></requiredProperty><requiredProperty key="appNameCap"><defaultValue>Szcz</defaultValue></requiredProperty></requiredProperties>

在这里插入图片描述
去替换文件中的内容,路径中的参数是双下划线_参数名_,文件内部的参数是${参数名}
在这里插入图片描述
一般xml文件、java文件模板会自动替换占位符,另外有一些自定义文件,模板不会识别,比如sh脚本、md文件等,我们以Dockerfile为例(随便自己定义个文件也行),在archetype-metadata.xml写<fileSets>

    <fileSets><!-- 写进模板,但不替换的占位符的,不设置 filtered="true"即可--><!-- 写进模板,要替换的占位符的,filtered="true"--><fileSet encoding="UTF-8" filtered="true"><directory></directory><includes><include>Dockerfile</include><include>README.md</include></includes></fileSet></fileSets>

每一个module下面如果有默认不识别的文件也要单独配置:
在这里插入图片描述
去替换文件中的内容:
在这里插入图片描述
注:如果有自定义参数,需要在archetype.properties里配置自定义参数
在这里插入图片描述

7、安装Archetype

全部修改完后,进入target\generated-sources\archetype下,执行mvn install安装到本地
执行成功后,在我们本地的maven仓库里会有一个archetype-catalog.xml文件。

8、使用Archetype

在一个新的目录下执行以下命令,会把新项目生成到对应的目录下

# 其中-D后面接的时自定义参数,也可以接默认参数,如-DgroupId
mvn archetype:generate -DarchetypeCatalog=local -DappName=abc -DappNameCap=Abc

按提示输入对应的内容即可
在这里插入图片描述

9、删除脚手架只要删除archetype-catalog.xml对应的节点就可以了


http://www.mrgr.cn/p/05577614

相关文章

python利用stable-diffusion-webui画图

官网 https://github.com/AUTOMATIC1111/stable-diffusion-webui 免python版本 https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre 先把源码,克隆到本地,conda创建一个虚拟环境 git clone https://github.com/AUTOMATIC1111/stable-diffusio…

BOSHIDA AC/DC电源模块的设计与实现技巧

BOSHIDA AC/DC电源模块的设计与实现技巧 AC/DC电源模块是一种常用的电源模块,用于将交流电转换为直流电,为各种电子设备提供电力。在设计和实现AC/DC电源模块时,有一些重要的技巧需要注意。 首先,选择适当的拓扑结构对于AC/DC电源模块的性能至关重要。常见的拓扑结构包括线…

振弦采集仪在岩土工程监测中的故障排除和维护要点

振弦采集仪在岩土工程监测中的故障排除和维护要点 河北稳控科技振弦采集仪在岩土工程监测中是一种常用的测量设备,通过测量振弦的振动频率来判断土体的力学性质和变形情况。然而,如果振弦采集仪出现故障,则会影响监测工作的正常进行。因此,掌握振弦采集仪的故障排除和维护要…

汇编语言——比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示MATCH, 不相同则显示NO MATCH

CMPS 串比较指令&#xff1a; CMPS SRC, DST CMPSB &#xff08;字节&#xff09; CMPSW &#xff08;字&#xff09; 执行操作&#xff1a; ((SI)) - ((DI)) 根据比较结果置条件标志位&#xff1a;相等 ZF1&#xff1b;不等 ZF0 字节操作&#xff1a;(SI)←(SI)1, (DI)←(DI…

Mysql-事务的基本特性和隔离级别

0.背景 在数据库中,事务是一组数据库操作,可以将事务操作视为一个基本的工作单元。 1.事务的基本特性 事务的基本特性“ACID” 对于事务呢,就是这一组sql操作,要确保ACID这4个基本特性。 哎,八股文不好背,我记忆方式是:一元吃个(原持隔)原子性(Atomicity):事务中的…

AWS宣布推出Amazon Q :针对商业数据和软件开发的生成性AI助手

亚马逊网络服务&#xff08;AWS&#xff09;近日宣布推出了一项名为“Amazon Q”的新服务&#xff0c;旨在帮助企业利用生成性人工智能&#xff08;AI&#xff09;技术&#xff0c;优化工作流程和提升业务效率。这一创新平台的推出&#xff0c;标志着企业工作方式的又一次重大变…

安卓手机原生运行 ARM Ubuntu 24.04 桌面版(一)

本篇文章&#xff0c;聊一聊尝试让安卓手机原生运行 Ubuntu&#xff0c;尤其是运行官方未发布过的 ARM 架构的 Ubuntu 24.04 桌面版本。 写在前面 最近的几篇文章&#xff0c;都包含了比较多的实操内容、需要反复的复现验证&#xff0c;以及大量的调试过程&#xff0c;为了不…

使用pycnblog一键拖拽同步markdown和图片

博客园一键拖拽同步markdown和图片 原因本地使用Typora写完文档,上传博客园时,图片不能同步解决办法 参考链接博客园上传markdown文件准备工作下载工具pycnblog安装Python3pip install pyyaml配置config.yaml blog_url: https://rpc.cnblogs.com/metaweblog/testblog blog_id…

|Python新手小白中级教程|第二十三章:列表拓展之——元组

文章目录 前言一、列表复习1.索引、切片2.列表操作字符3.数据结构实践——字典 二、探索元组1.使用索引、切片2.使用__add__((添加元素&#xff0c;添加元素))3.输出元组4.使用转化法删除元组指定元素5.for循环遍历元组 三、元组VS列表1.区别2.元组&#xff08;tuple&#xff0…

blazor优雅的方式导入组件相关的js脚本

基本的组件导入方式为:1 await JsRuntime.InvokeVoidAsync("import", $"XXXXX.js");优雅的组件导入方式:1 await JsRuntime.ImportAsync<DocEditor>();这种优雅一点不难,只需要写一个扩展方法,把他放在任意地方并且导入命名空间,或者放到和项目…

企业防泄露如何做到安全有效

随着信息时代的急速演进&#xff0c;企业的重要商业机密越来越多地以电子文档的形式存在。常见的CAD图纸、Office文档承载着公司的核心价值和竞争优势&#xff0c;同时也面临着前所未有的数据安全威胁。确保这些重要信息的文档安全已经成为每个企业必须直面的挑战。在这样的背景…

公司数据防泄漏方案分享|防泄密软件有哪些

企业的数据安全是公司稳定发展的必要条件&#xff0c;如何防止内部数据泄露企业的数据安全是公司稳定发展的必要条件&#xff0c;如何防止内部数据泄露已经成为了一个亟待解决的问题。在这个信息时代&#xff0c;数据已经成为企业最重要的资产之一&#xff0c;因此&#xff0c;…

02 冒泡排序

02 冒泡排序1.冒泡排序的含义每次交换两个,把大的扔在末尾, 每一轮可以确定末尾是最大的,然后是次尾部,依次进行下去。 老师:每次都是搞定最大的数,最大的数往右边冒。再接着搞定下一轮,直到整个数组有序。 图示:2.示例代码 def bubble_sort(arr):# if not arr or len(…

数据库(MySQL)—— DQL语句(基本查询和条件查询)

数据库&#xff08;MySQL&#xff09;—— DQL语句&#xff08;基本查询和条件查询&#xff09; 什么是DQL语句基本查询查询多个字段字段设置别名去除重复记录 条件查询语法条件 我们今天进入MySQL的DQL语句的学习&#xff1a; 什么是DQL语句 MySQL中的DQL&#xff08;Data Q…

一站式生活新体验:可视化技术让公寓商场综合楼焕新生

可视化技术将传统的居住与购物空间进行了完美融合。在这里,你不再需要为了购买生活用品而特地跑到远处的商场,也不再需要为了找一家心仪的餐厅而四处奔波。通过可视化技术,你可以轻松查看到楼内的各个商铺、餐厅、健身房等配套设施的分布情况,一键导航直达目的地,享受一站…

SAP生产订单常用状态以及

常用系统状态&#xff1a; 状态 状态 CRTD 已建立 REL 已核发 CNF 已确认 PCNF 已部份确认 DLV 已交货 DLT 删除指示码 LKD 已锁住 TECO 技术完成 GMPS 已发料 关闭 关闭 工单结案前的生产报表分析 路径:后勤系统- 生产- 现场控制- 信息系统-订单信息系…

《无尽冬日》上线不足一月微信小游戏销售夺冠

易采游戏网5月7日消息&#xff0c;小游戏市场近期掀起了一股不小的波澜&#xff0c;世纪华通旗下的点点互动推出的小游戏《无尽冬日》成功登顶微信小游戏畅销榜&#xff0c;这一成绩无疑让人眼前一亮。上线仅29天&#xff0c;就超越了霸榜数月的《寻道大千》&#xff0c;这样的…

MySQL-基础语法教程及事务和索引

基础解析: select 要几列 where要几行,用来对行进行过滤,加where,查出来的行变少 *代表所有的列 增删改查UPDATE SET 更新 UPDATE scores SET score=300 WHERE NAME="王大" AND kemu="语文" delete语法 DELETE FROM scores WHERE ID =11#删除整张表里的…

H3C Private VLAN实验

Private VLAN 实验1 实验需求 按照图示配置 IP 地址 在 SW1 上配置 Private VLAN&#xff0c;Primary VLAN 为 Vlan30&#xff0c;Secondary VLAN 为 Vlan10 和 Vlan20 SW2 通过 Vlan100 下行连接 SW1&#xff0c;要求 PC3 和 PC4 都能以 Vlan100 访问 PC5 在 SW1 上配置 …

MySQL-基础语法教程

基础解析: select 要几列 where要几行,用来对行进行过滤,加where,查出来的行变少 *代表所有的列 增删改查UPDATE SET 更新 UPDATE scores SET score=300 WHERE NAME="王大" AND kemu="语文" delete语法 DELETE FROM scores WHERE ID =11#删除整张表里的…