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

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核