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

使用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发布到私服,统一团队的编码风格。

相关文章:

  • 2.JVM-通俗易懂理解类加载过程
  • Java vs Go:SaaS 系统架构选型解析与最佳实践
  • 【FreeRTOS】FreeRTOS操作系统在嵌入式单片机上裸机移植
  • CSS 的 inherit、initial、revert 和 unset区别
  • mysql安装与使用
  • 深入理解 ALSA 声卡驱动:从理论到实践,解决嵌入式 Linux 声卡无声问题
  • 辉芒单片机FLASH->ACR导致的问题
  • Springboot+Netty+WebSocket搭建简单的消息通知
  • 大一新生备战蓝桥杯c/c++B组——2024年省赛真题解题+心得分享
  • 数仓建模和标签体系之间存在着密切的依赖关系
  • 27_Java2DRenderer结合freemarker动态生成图片
  • 可视化图解算法:合并k个已排序(升序)的链表
  • LeetCode——560. 和为 K 的子数组
  • 目前人工智能的发展,判断10年、20年后的人工智能发展的主要方向,或者带动的主要产业
  • 【openwebui 搭建本地知识库(RAG搭建本地知识库)】
  • 软件测试之测试用例
  • Microsoft Edge “无法更新” 解决办法
  • 学习笔记之车票搜索为什么用Redis而不是ES?
  • 32单片机——LED
  • 通过 Python 爬虫提高股票选股胜率
  • 江西吉水通报一男子拒服兵役:不得考公,两年内经商、升学等受限
  • 《AI×SCIENCE十大前沿观察》9:合成数据和数据基础设施
  • 人民空军:网上出现的“运-20向外方运送物资”为不实消息
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事
  • 新城市志|上海再攻坚,营商环境没有最好只有更好
  • “苏河超级管”调研:桥下公园“留白”很好,指引差点