【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架

news2024/11/16 5:24:20

技术推荐

自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html,详细介绍了如何快速创建和使用Archetype。

技术背景

  • 在工作过程中必然会遇到创建项目的蛋疼事,一个项目包含茫茫多的配置文件。例如:Spring、mybatis、log4j、pom.xml、git等,其他的还包括项目目录骨架。整个过程下来顺利的话几十分钟,如果对公司项目配置不了解的情况下,几个小时都是有可能的。

  • maven的强大就不言而喻了,自定义项目骨架主要利用到 archetype插件。在IDE中创建maven项目时,可以选择archetype类型快速创建项目目录。例如最常见的maven-archetype-plugin 的quickstart。maven考虑到通用性,提供的是最简单的目标。

  • 新建项目时,配置文件往往是从其他项目拷贝过来的,拷贝的问题在于很容易踩坑,并且不容易定位问题。利用maven一键生成项目骨架可以解决所有的问题。

什么是Archetype

Archetype原型是一个Maven项目模板工具包。一个原型被定义为从其中相同类型的所有其它事情是由一个原始图案或模型。名称配合,因为我们正在努力提供一种系统,该系统提供了一种生成Maven项目的一致的手段。原型将帮助作者为用户创建Maven项目模板,并为用户提供了手段,产生的这些项目模板参数化的版本。

使用原型提供了一个很好的方式,迅速使开发人员在与您的项目或组织采用最佳实践一致的方法。在Maven的项目中,我们使用原型,试图让我们的用户和运行尽可能快地通过提供展示许多的Maven的功能,同时引入新的用户通过采用Maven的最佳实践的示例项目。在几秒钟内一个新的用户可以有一个工作Maven项目作为跳板用于调查更多的功能,Maven中。我们也试图使原型机制添加剂和由我们的意思是允许一个项目的一部分被捕获在一个原型,使得项目的部件或方面可以被添加到现有的项目。这方面的一个很好的例子是Maven站点原型。如果,例如,您使用的快速启动原型生成一个工作项目,你可以迅速通过使用现有项目中的网站原型创建网站的项目。你可以做这样的事与原型。

您可能要在组织内部规范J2EE开发,所以你可能要提供原型为EJB,或者,或者您的Web服务的战争。一旦这些原型创建和部署在您的组织的资源库,他们都可以在组织内使用的所有开发人员。

上面是我根据maven官网在百度翻译出来的,大家将就着看,大概意思就是archetype是Maven项目模板工具包,也就是一个模板工程。

创建自定义的archetype项目

使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,其中的一个插件:maven-archetype-plugin
,通过该插件可以自定义符合我们自己需求的archetype。

创建的maven project的pom.xml文件中添加archetype插件

<build>
   <pluginManagement>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-archetype-plugin</artifactId>
              <version>3.0.0</version>
          </plugin>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-resources-plugin</artifactId>
              <configuration>
                   <encoding>UTF-8</encoding>
              </configuration>
           </plugin>
      </plugins>
    </pluginManagement>
</build>

进入该project的根目录,执行mvn命令mvn archetype:create-from-project.

如果用IDEA可以采用:

成功执行完之后,在target/generated-sources/ 下有个archetype目录,这个就是生成的archetype。可以看到这个目录其实就是普通的maven项目,也就是我们最终的骨架模板项目,我们称之为template项目。

有几个目录、文件需要说明:

  • src/main/resources/archetype-resources:通过template骨架创建的项目包含的所有的文件和目录都在这个目录下
  • src/main/resource/META-INF/maven/archetype-metadata.xml此文件是配置文件,告诉archetype插件,archetype-resources里面哪些文件需要包含到创建出的项目里。打开这个文件发现有个fileSets标签,包含一系列的fileSet标签。不难发现fileSet就是对archetype-resources下的资源描述。
改造template

archetype:create-from-project并非完全智能,需要自己稍加修改

  • 修改pom.xml文件

  • 修改packing的值为jar或者war

修改archetype-metadata.xml
<requiredProperties>
      <requiredProperty key="groupId"/>
      <requiredProperty key="artifactId"/>
      <requiredProperty key="version">
          <defaultValue>1.0.0</defaultValue>
      </requiredProperty>
</requiredProperties>

在fileSets同级下增加requiredProperties标签。

requiredProperties定义模板项目中一些参数值,内置的参数包括:

  • groupId
  • artifactId
  • version
  • package

自己可以提供这些参数的默认值,也可以增加自己额外的参数。大部分情况下,内置的参数足够用。

  • fileSet标签有一个filtered=“true”属性,表示该fileSet可以使用参数变量。

  • 在文件中引用参数变量的方式 参数名 , 例如 {参数名},例如 参数名,例如{package}

通常生成template项目时,archetype插件会扫描所有的文件,把需要替换为参数的地方自动替换。毕竟代码没有那么智能,有些地方会有问题。所以,我们要检查每个文件的参数部分是不是我们预期的。增加参数、删除参数来达到我们的要求。

部署生成的archetype本地仓库

execute(create-from-project)之后,在 target 文件夹下,生成骨架模板,如下:

修改工作目录为 骨架所在的目录,然后执行 install 命令:

  • cd进入generated-sourced/archetype目录,运行maven命令:mvn clean install,到这里我们的模板骨架项目基本完成。

或者采用idea:

此时,可以在maven仓库中看到,已经生成好的骨架模板:

这个xml文件记录了骨架的信息,一会要用到!

执行 archetype:crawl 命令

路径无所谓,命令: archetype:crawl

IDEA:可以采用

执行完毕后,在maven根目录下会生成 archetype-catalog.xml 文件。

这个文件记录 用户自定义骨架的信息。

archetype-catalog.xml的内容

部署到maven私服

修改archetype目录下的pom.xml文件添加配置

<distributionManagement>  
        <repository>  
            <id>releases</id>  
            <name>Micaicms Releases</name>  
            <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>  
        </repository>  
        <snapshotRepository>  
            <id>snapshots</id>  
            <name>Micaicms Releases</name>  
            <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>  
        </snapshotRepository>  
</distributionManagement>  
配置maven里面的settings.xml文件

的settings.xml文件配置如下,配置好以后就可以执行发布命令了

注意:此处的配置,id要与setting.xml中的server标签中的id一致。

上传到maven私服中

cd进入generated-sourced/archetype目录,运行maven命令:

  1. mvn clean install
  2. mvn deploy
成功后即可在maven私服中查看到该模板

使用原型创建新项目

任意目录下执行

mvn archetype:generate -DarchetypeGroupId=com.ktr -DarchetypeVersion=1.0 -DarchetypeArtifactId=ktr-archetype
添加IDEA

点击Add Archetype

对应填写好 如果放在私服中就要在Reposytory中写上私服路径 这样就可以用了,

删除自定义骨架

如果这个骨架不合适需要删除骨架,找到 IntelliJ IDEA 的骨架配置文件,大概就是这个位置: C:\Users${user}.IntelliJIdea${version}\system\Maven\Indices

这里面有个文件 UserArchetypes.xml

然后…你就可以删除它了… 可以删除这一条, 也可以删除整个文件, 然后重启 IDEA , 你就会发现删除成功!

参考:

http://www.colorfuldays.org/tag/archetype/

http://maven.apache.org/archetype/maven-archetype-plugin/

http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html

http://maven.apache.org/archetype/maven-archetype-plugin/create-from-project-mojo.html

http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html

http://maven.apache.org/archetype/maven-archetype-plugin/examples/generate-batch.html

http://maven.apache.org/archetype/maven-archetype-plugin/specification/generate.html

http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-catalog.html

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

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

相关文章

最新版Crack:Xceed Ultimate Suite

Xceed Ultimate Suite 包括 160 多个适用于所有 Windows 平台的自适应、可靠和高性能控件和库的重要集合。程序前端的 UI 控件和后端的数据处理库。经常更新&#xff0c;并得到反应支持和开发人员的认可。 适用于所有 Windows 平台的 160 个自适应、可靠和高性能控件和库的重要…

vue-elementUI后台管理系统,已实现用户管理、菜单管理、角色管理、公司管理、权限管理、支付管理等

vue搭建后台管理界面模版&#xff08;PC端&#xff09; 完整代码下载地址&#xff1a;vue-elementUI后台管理系统 技术栈 vue2 vuex vue-router webpack ES6/7 axios elementUI 阿里图标iconfont 项目预览 http://nmgwap.gitee.io/vueproject/#/login 说明 本项目主…

Python使用pandas导入csv文件内容

使用pandas导入csv文件内容使用pandas导入csv文件内容1. 默认导入2. 指定分隔符3. 指定读取行数4. 指定编码格式5. 列标题与数据对齐使用pandas导入csv文件内容 1. 默认导入 在Python中导入.csv文件用的方法是read_csv()。 使用read_csv()进行导入时&#xff0c;指定文件名即…

jQuery 过滤方法

文章目录jQuery 过滤方法hasClass() 类名过滤eq() 下标过滤is() 判断过滤not() 反向过滤filter() 表达式过滤has() 表达式过滤后代元素jQuery 过滤方法 过滤方法说明hasClass()类名过滤eq()下标过滤is()判断过滤not()反向过滤filter()表达式过滤has()表达式过滤后代元素 hasCl…

微软发现macOS漏洞可让恶意软件绕过安全检查

©网络研究院 苹果修复了一个漏洞&#xff0c;攻击者可以利用该漏洞通过能够绕过 Gatekeeper 应用程序执行限制的不受信任的应用程序&#xff1b;在易受攻击的 macOS 设备上部署恶意软件。 由微软首席安全研究员发现并报告的安全漏洞&#xff08;称为Achilles&#xff09…

前端基础_矩阵变换

矩阵变换 在介绍矩阵变换之前&#xff0c;首先要介绍一下变换矩阵&#xff0c;这个矩阵是专门用来实现图形变形的&#xff0c;它与坐标一起配合使用&#xff0c;以达到变形的目的。当图形上下文被创建完毕时&#xff0c;事实上也创建了一个默认的变换矩阵&#xff0c;如果不对…

腾讯T4熬夜硬肝的全套微服务学习笔记,Github万星只是开始

写在前面 微服务架构被认为是 IT 软件架构的未来方向。热度虽高&#xff0c;但对于很多中小公司来说微服务却是遥不可及&#xff0c;因为团队规模和能力又反过来制约了他们采用新技术的步伐。很多人对于微服务技术也都有着一些疑虑&#xff0c;比如&#xff1a;微服务这技术虽然…

编译器原理简介(以Cortex-M3为例)

在"keil根目录\ARM\ARMCC\bin"下可以找到如下文件&#xff1a; 他们就是编译器内核&#xff0c;将工程代码转换成二进制文件&#xff0c;烧写进MCU中执行。 目录 C与汇编 典型的开发流程 编译工具报错举例 C与汇编 在CM3上编程&#xff0c;开发人员既可以使用C也…

CANoe-新型通信模式(SOA面向服务架构)

传统的以ECU为单元的整车通信架构,是面向信号的以CAN/LIN等总线为代表的经典通信模式。而以车载以太网为总线,SOME/IP或DDS等为中间件的SOA面向服务的新型通信模式,在以域控为单元的整车通信架构中被越来越多的使用 CANoe作为仿真和测试环境提供了统一的跨网络通信概念。这…

字符设备驱动_3:register_chrdev_region() 简单字符设备驱动的实现

概述&#xff1a;利用regist_chrdev_region() 函数接口注册同一类字符设备的多个子设备。 上一节一起整理了一遍注册一个简单字符设备的流程&#xff0c;接下来就来实现一个同一类字符设备的多个子设备驱动程序。 1. Demo 程序 #include <linux/module.h> #include <…

Linux篇 三、香橙派Zero2搭建Qt环境

香橙派Zero2系列文章目录 一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 三、香橙派Zero2搭建Qt环境 文章目录香橙派Zero2系列文章目录前言一、下载交叉编译工具二、编译QT库1.先去网站下载Qt的资源包2.解压3.开始移植&#xff1a;4.编译&#xff1a;5.安…

jQuery 查找方法

文章目录jQuery 查找方法查找祖先元素parent()parents()parentsUntil()查找后代元素children()find()contents()向前查找兄弟元素prev()prevAll()prevUnitl()向后查找兄弟元素next()nextAll()nextUntil()查找所有兄弟元素siblings()jQuery 查找方法 查找祖先元素查找后代元素向…

年度创新力十强,热点领域重要力量,典型案例报告入选!美创再获ISC安全百强多项殊荣

12月21日&#xff0c;数字安全界“奥斯卡”—ISC 2022数字安全创新能力百强&#xff08;简称“创新百强”&#xff09;重磅揭晓&#xff0c;本届评选由ISC平台发起&#xff0c;联合赛迪顾问、数世咨询、数说安全、看雪、安在等网络安全行业权威机构、媒体共同开启评选&#xff…

web开发前基础知识补充

什么是URL&#xff1f; URL是统一资源定位符&#xff0c;对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址&#xff1b; 互联网上的每个文件都有一个唯一的URL&#xff1b; 基本URL包含模式&#xff08;或称协议&#xff0…

Kafka使用MirrorMaker同步数据的两种方式

1.前言 MirrorMaker 是 Kafka官方提供的跨数据中心的流数据同步方案。原理是通过从 原始kafka集群消费消息&#xff0c;然后把消息发送到 目标kafka集群。操作简单&#xff0c;只要通过简单的 consumer配置和 producer配置&#xff0c;然后启动 Mirror&#xff0c;就可以实现准…

不喜欢现在的工作,如何成功转行?

对现有行业职业公司不满、不喜欢&#xff0c;感觉此路不通&#xff0c;想换个跑道再战&#xff01; 我想说&#xff0c;请先冷静一下。 我有两个认识的人&#xff0c;一个成功转行&#xff0c;另一个失败。后面会有我的分析~~ 我的一位女性朋友A&#xff0c;小公司里工作近1…

00后的他为何能年薪30w,转行真的很难吗?

网上有很多人经常在讨论转行&#xff0c;有的人说转行很难&#xff0c;有的却说不难&#xff0c;到底是怎样呢&#xff1f;我来说一个我身边发生的这么一个事实吧&#xff01; 我之前接触过一个00后&#xff0c;他不同于别人&#xff0c;网上大多说00后是看老板不爽就直接不干…

unidbg入门级案例-某航空app_hnairSign分析

今天要分析的是某航空app&#xff0c;版本号是8.19.0&#xff0c;分析的样本在文章底部会提供&#xff0c;这次我们要借用unidbg 来辅助进行算法还原。 有关unidbg的介绍笔者就不做过多的描述&#xff0c;大家可自行百度查询。 该样本的so比较简单&#xff0c;但重点是记录分析…

多标签分类怎么做?(Python)

一、基本介绍 首先简单介绍下&#xff0c;多标签分类与多分类、多任务学习的关系&#xff1a; 多分类学习&#xff08;Multi-class&#xff09;&#xff1a;分类器去划分的类别是多个的&#xff0c;但对于每一个样本只能有一个类别&#xff0c;类别间是互斥的。例如&#xff1…

electron:获取MAC地址

一、背景 当我们需要用户“使用指定设备”访问程序的时候&#xff0c;我们需要获取用户设备的固定的id&#xff0c;设备id用户id实现业务需求&#xff0c;这个所谓的id就是MAC地址。 对于其他方法&#xff1a; uuid&#xff1a;uuid是一个唯一的字符串&#xff0c;可以存放到…