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

news2024/11/26 3:41: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>

在这里插入图片描述
去替换文件中的内容,路径中的参数是双下划线_参数名_,文件内部的参数是${参数名}
在这里插入图片描述
这种改了文件名的,需要在target\test-classes\projects\basic\project\basic找到原目录删除原文件,不然生成的archetype会同时生成旧的文件。
在这里插入图片描述
一般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下面如果有默认不识别的文件也要单独配置:
在这里插入图片描述
去替换文件中的内容:
在这里插入图片描述
注:如果有自定义参数,需要在test/resources/projects/archetype.properties里配置自定义参数
在这里插入图片描述
spring.factories内容替换
在这里插入图片描述
在archetype-metadata.xml写<fileSets>上正面内容

<module id="${rootArtifactId}-starter-cloud" dir="__rootArtifactId__-starter-cloud" name="${rootArtifactId}-starter-cloud">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/resources</directory>
          <includes>
            <include>**/*.factories</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>

效果图
在这里插入图片描述

7、安装Archetype

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

8、使用Archetype

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上海AI Lab开源首个可替代GPT-4V的多模态大模型

与开源和闭源模型相比&#xff0c;InternVL 1.5 在 OCR、多模态、数学和多轮对话等 18 个基准测试中的 8 个中取得了最先进的结果。 上海AI Lab 推出的 InternVL 1.5 是一款开源的多模态大语言模型 (MLLM)&#xff0c;旨在弥合开源模型和专有商业模型在多模态理解方面的能力差距…

智慧公厕打造智慧城市新标杆

公共厕所作为城市基础设施的重要组成部分&#xff0c;直接关系到市民的生活品质和城市形象。传统的公厕管理方式存在着许多问题&#xff0c;如环境脏乱、清洁不及时等&#xff0c;给市民带来了诸多不便和不满。而智慧公厕作为一种全新的管理模式&#xff0c;通过物联网、大数据…

CSS-浮动

float (浮动) 作用&#xff1a;盒子的顶点是一样的&#xff0c;具备行内块的特征&#xff0c;能设置宽高 属性&#xff1a;float 属性值&#xff1a;left 浮动在网页左边 right 浮动在网页右边 .a{width: 100px;height: 100px;float:left;background-color: red;}.b…

AI算法-高数2-导数定义和公式

P14 2.1 导数的定义(一):2.1 导数的定义_哔哩哔哩_bilibili 导数定义&#xff1a; 导数公式&#xff1a; P15 2.1 导数的定义(二)&#xff1a;2.1 导数的定义&#xff08;二&#xff09;_哔哩哔哩_bilibili [a,b]可导&#xff0c;a的端点&#xff1a;右可导&#xff0c;b端点&…

[ 视频号]代替用户发布视频api

使用接口&#xff0c;替代用户使用设备直接发布视频api 接口地址&#xff1a; http://接口地址/api/v2 先调用登录接口&#xff0c;进行账号登录 登录二维码接口入参&#xff1a; {"appId": "","proxyIp": "","regionId"…

企业网站管理系统(多语言)源码搭建/部署/上线/运营/售后/更新

一款基于FastAdminThinkPHPUniapp开发的企业网站管理系统插件。支持自定义多语言、自定义模型与字段、自定义表单等功能。 功能特性 多语言功能&#xff08;默认中英文&#xff0c;后台可新增语言&#xff0c;并支持管理前台语言包&#xff09;有道api翻译功能响应式布局&…

安全加固

目录 1.文件锁定管理 2.设置用户账户有效期 3.查看并清除命令历史记录 4.设置用户超时登出时间 5.用户切换 6.用户提权 7.禁用重启热键CtrlAltDel 8.设置单用户模式密码 9.调整BIOS引导设置 10.禁止root用户从本地登录&#xff1a; 11.禁止root用户通过ss…

Linux系统编程--初识Linux

目录 一、相关概念 1、Unix系统 2、操作系统 操作系统的分类&#xff1a; 流行的操作系统&#xff1a; 3、Ubuntu系统及特点 二、Ubuntu安装 三、Linux目录 /根目录 路径分类&#xff1a; 四、shell指令 1、命令行提示符&#xff1a; 2、指令 2.1命令基本的操作&…

Meta FAIR: 深层网络不合理的低效性

这篇文章的标题"The Unreasonable Ineffectiveness of the Deeper Layers"巧妙地呼应了著名物理学家尤金维格纳在1960年发表的一篇论文"数学在自然科学中不合理的有效性"(The Unreasonable Effectiveness of Mathematics in the Natural Sciences)。维格纳…

ubuntu22.04服务器docker-compose方式部署ldap服务

一&#xff1a;系统版本 二&#xff1a;部署环境 节点名称 IP 部署组件及版本 配置文件路径 机器CPU 机器内存 机器存储 Ldap 10.10.10.111 self-service-password:latest phpldapadmin:latest openldap:latest openldap:/data/openldap/config phpldapadmin&#x…

梅兰日兰NSJ400N断路器NSJ400N可议价

梅兰日兰 NSJ400N 3 极 400 安培 600 伏交流电 紧凑型断路器 制造商的原始标签 脱扣单元&#xff1a;LS 功能 –&#xff08;长时间和短时间&#xff09; 负载侧凸耳 中断额定值&#xff1a;65kA 240 Vac 35kA 480 伏交流电压 18kA 600 伏交流电压 &#xff08;外观可能与照…

01、vue+openlayers6实现自定义测量功能(提供源码)

首先先封装一些openlayers的工具函数&#xff0c;如下所示&#xff1a; import VectorSource from ol/source/Vector; import VectorLayer from ol/layer/Vector; import Style from ol/style/Style; import Fill from ol/style/Fill; import Stroke from ol/style/Stroke; im…

【SpringBoot整合系列】SpringBoot整合RabbitMQ-消息过期(死信队列和延迟队列)

目录 业务场景传统轮询消息队列完整版 默认情况TTL&#xff08;消息的有效期&#xff09;TTL 的设置有两种不同的方式单条消息过期队列消息过期特殊情况 死信队列概述应用场景产生原因原理图死信交换机死信队列实现一下 延迟队列背景定时任务&#xff1f;延迟队列实现思路代码 …

Spring @Repository 注解

Spring 的项目严重依赖注解。 Repository 注解 在Spring2.0之前的版本中&#xff0c;Repository注解可以标记在任何的类上&#xff0c;用来表明该类是用来执行与数据库相关的操作(即dao对象)&#xff0c;并支持自动处理数据库操作产生的异常 在Spring2.5版本中&#xff0c;引…

校园网拨号上网环境下多开虚拟机,实现宿主机与虚拟机互通,并访问外部网络

校园网某些登录客户端只允许同一时间一台设备登录&#xff0c;因此必须使用NAT模式共享宿主机的真实IP&#xff0c;相当于访问外网时只使用宿主机IP&#xff0c;此方式通过虚拟网卡与物理网卡之间的数据转发实现访问外网及互通 经验证&#xff0c;将centos的物理地址与主机物理…

【概率论基础】 一篇文章缕清概率论常见概念关系

碎碎念&#xff1a;再写CSDN之前有一小段时间写数模公众号的经历&#xff0c;但是公众号看的人实在太少了&#xff0c;而且排版和公式、代码编辑都没有CSDN这么方便&#xff0c;所以坚持一算时间就没有更新了。公众号大多写的是概念性的基础&#xff0c;稍加修改搬到咱们的主战…

《二十二》Qt 音频编程实战---做一个音频播放器

1.UI界面制作 作为一个音乐播放器&#xff0c;最基础的肯定就是播放、暂停、上一首以及下一首&#xff0c;为了使这个界面好看一点&#xff0c;还加入了音量控制、进度条、歌曲列表等内容&#xff0c;至于这种配色和效果好不好看&#xff0c;我也不知道&#xff0c;个人审美一如…

C语言初阶(6) - 指针

目录 1.指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针 - 整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 常量指针和指针常量 (const) 4.1.常量指针 4.2.指针常量 5. 指针运算 5.1 指针-整数 5.2 指针-指针 5.3指针的关系运算 6.…

离线使用evaluate

一、目录 步骤demorouge-n 含义 二、实现 步骤 离线使用evaluate: 1. 下载evaluate 文件&#xff1a;https://github.com/huggingface/evaluate/tree/main2. 离线使用 路径/evaluate-main/metrics/rougedemo import evaluate离线使用evaluate: 1. 下载evaluate 文件&…

Android 百度语音识别(详细步骤+源码),京东android面试题

改好之后&#xff0c;请注意&#xff0c;每个人都是不一样&#xff0c;你如果发现你创建的应用的配置的值和我创建的是一模一样的&#xff0c;你马上去百度提BUG&#xff0c;他们的程序员要就要下岗了~ OK&#xff0c;现在配置也完成了&#xff0c;接下来就是使用了。 ③ 使用…