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

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可