Maven实战: 创建自定义archetype

2024-06-04 21:04

本文主要是介绍Maven实战: 创建自定义archetype,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在手动创建SpringBoot应用中,我们讲过手动创建SpringBoot工程是比较麻烦的,尤其是公司内部不有自定义扩展和集成的情况下。利用Maven的archetype:generate能基于项目模板生成功能,自定义模板能让整个创建过程自动化,这样既能大大降低创建和集成SpringBoot的复杂度,还能做到公司内部的标准化。要自定义archetype,需要做7个步骤:

  1. 创建archetype的工程
  2. 定义archetype的pom,方便在mvn archetype:generate时引用当前模板
  3. 定义archetype的描述文件,配置哪些属性/文件/模块应该包含在生成的项目内,位于 src/main/resources/META-INF/maven/archetype-metadata.xml
  4. 定义原型的pom,编辑后作为新生成项目的pom,位于 src/main/resources/archetype-resources/pom.xml
  5. 定义原型的文件,编辑后作为新生成项目的内容,位于 src/main/resources/archetype-resources/
  6. 安装archetype到仓库,供后续生成项目时使用
  7. 使用自定义archetype生成项目

1. 创建工程

其实archetype也是普通的Maven工程,可以通过maven-archetype-quickstart能生成一个简单的Maven项目,我们将它命名为DiveInSpringArchetype

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DgroupId=com.keyniu.dis -DartifactId=DiveInSpringArchetype -Dversion=0.1 -Dpackage=com.keyniu.dis -DinteractiveMode=false

这和我们之前创建的项目完全一样,整个目录树看起来是这样的

2. 定义archetype的pom

在DiveInSpringArchetype根目录下已经生成了pom.xml文件,我们修改一下pom.xml的内容,只保留GAV信息,添加archetype-packaging扩展

<?xml version="1.0" encoding="UTF-8"?><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.keyniu.dis</groupId><artifactId>DiveInSpringArchetype</artifactId><version>0.1</version><build><extensions><extension><groupId>org.apache.maven.archetype</groupId><artifactId>archetype-packaging</artifactId><version>3.1.1</version></extension></extensions></build>
</project>

3. 定义archetype的描述文件

接着来定义archetype-metadata.xml,这个文件存放在src/main/resources/META-INF/maven/archetype-metadata.xml,重点关注下面3个点

  1. archetype-descriptor.name,值必须和artifactId相同
  2. requiredProperty,在archetype:generate时,由用户输入,可以在工程内部引用,通过filtered=true,替换引用的变量
  3. fileSet,设置那些文件包含在生成的工程中,为了后续验证,可以在src/main/java、srce/main/resources创建一个模板文件
<?xml version="1.0" encoding="UTF-8"?><archetype-descriptor name="DiveInSpringArchetype"><requiredProperties><requiredProperty key="env"><defaultValue>prod</defaultValue></requiredProperty></requiredProperties><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>**/*.xml</include><include>**/*.factories</include><include>**/*.yaml</include><include>**/*.yml</include><include>**/*.properties</include></includes></fileSet></fileSets></archetype-descriptor>

4. 定义原型的pom

接着要创建src/main/resources/archetype-resources目录下,预定义要放入目标工程的内容,首先是放在原型的pom.xml文件,pom.xml能引用环境变量,包括执行archetype:generate时传入的GAV信息

<?xml version="1.0" encoding="UTF-8"?><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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>${groupId}</groupId><artifactId>${artifactId}</artifactId><version>${version}</version><packaging>jar</packaging><name>${artifactId}</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
</project>

5. 定义原型的文件

src/main/resources/archetype-resources除了能定义pom.xml,还可以放正常工程的文件,比如src/main/resources/archetype-resources/src/main/java里我们可以放AppConfig.java类,内容如下

package ${package};@ApplicationPath("${env}")
public class AppConfig extends Application {
}

这里的package ${package};根据调用mvn archetype:generate -Dpackage=xxx的值将AppConfig.java放到指定的包中。除此以外,我们还在src/main/resources/archetype-resources/src/main/resources中定义了一个application.properties文件,最终整个工程的结构是下面这样的。

6. 安装archetype到仓库

到这一步archetype创建完成了,现在可以将这个自定义archetype安装到本地仓库

mvn clean package install

7. 使用自定义archetype

现在一切准备就绪了,是时候用自定义archetype来创建工程了,通过执行命令

mvn archetype:generate -DarchetypeGroupId=com.keyniu.dis -DarchetypeArtifactId=DiveInSpringArchetype -DarchetypeVersion=0.1-DgroupId=com.keyniu.generate.example -DartifactId=GenExa -Dversion=0.1 -Dpackage=com.keyniu.gen.exa -DinteractiveMode=false

执行成功后整个GenExa工程的结构如下,AppConfig.java会正确的放入到对于的包中。

通过这一整套的流程,我们能做到的是创建任意格式的模板,可以在pom.xml、代码、配置中预定义所有的集成。不过用它的创建一个完整工程的模板还是有点麻烦的,我们编辑archetype-resources目录,而这个目录是没有包结构,不支持IDE错误提示的。mvn提供了一个命令来支持这种场景,这个我们在下一篇讲解。

A. 参考资料

  • Maven Archetype Plugin – Create an archetype from a multi-module project
  • Maven – Guide to Creating Archetypes

这篇关于Maven实战: 创建自定义archetype的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031116

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10