【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
技术推荐
自定义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命令:
- mvn clean install
- 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
【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架相关推荐
- [免费专栏] Android安全之动态调试APP的一些技巧「Android Studio调试」
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- dw上按钮事件 pb_「React TS3 专题」使用 TS 的方式在类组件里定义事件
在「React TS3 专题」亲自动手创建一个类组件,我们一起学习了如何用 TS 的方式在React 里定义类组件(class component)以及了解了什么是 JSX.本篇文章,笔者将带着大家一 ...
- 「mysql优化专题」你们要的多表查询优化来啦!请查收(4)
上一篇讲的是单表查询的优化,(本文末有链接).当然,对数据表的多表查询也是必不可少的.本篇内容主要讲解多表联合查询的优化 一.多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有 ...
- 「mysql优化专题」90%程序员都会忽略的增删改优化(2)
前文一篇「mysql优化专题」这大概是一篇最好的mysql优化入门文章(1)让大家知道msql优化,究竟在优化什么,本篇为mysql优化专题的第二篇,主要先从增删改进行优化. 补充知识点:操作数据语句 ...
- 「分布式技术专题」基于Gossip协议的去中心服务
概述 Gossip 协议可以翻译为流言协议.它是在 1987 年发表在 ACM 上的论文 <Epidemic Algorithms for Replicated Database Mainten ...
- java代码规范插件_「Java基础知识」代码规范插件怎么用
原标题:「Java基础知识」代码规范插件怎么用 在开发中,好的编程风格可以提升团队合作能力,提升开发的效率,但是每个人都有自己的编程习惯,如何能够将大家的编程风格统一,这个在团队中也很重要; 在Jav ...
- maven原型_创建自定义Maven原型
maven原型 Maven原型是项目模板,可以帮助我们根据其类型快速创建maven入门项目 . 这是一个不费吹灰之力地引导Maven项目的好工具. 我们可以使用多种原型. 一些流行的原型包括– mav ...
- 创建自定义Maven原型
Maven原型是项目模板,可以帮助我们根据其类型快速创建maven入门项目 . 这是一个非常省力的引导Maven项目的好工具. 有许多可供选择的原型. 一些流行的原型包括– maven-archety ...
- 如何创建自定义maven archetype?
如何创建自定义maven archetype? 文章目录 如何创建自定义maven archetype? 1. 什么是archetype 2. 创建项目模板 3. 创建archetype目录结构 4. ...
最新文章
- tensorflow学习笔记————分类MNIST数据集
- 68-95-99规则–以普通英语解释正态分布
- git如何添加远程主机_Git远程操作详解
- 数论三之组合数学Ⅰ-Max-Min Sums,Binomial Coefficient is Fun,Strivore,Bubble Sort,放棋子,LOJ6671,Iroha and a Grid
- linux shell if
- 【Java】使用前准备工作配置环境变量
- mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
- iOS--UIView和UIWindow用法
- 全球五百强IT名企智力题精选
- 动态ip地址方案有什么优点和缺点_OA期刊的优点和缺点是什么
- 新媒体运营神器-迅捷旗下的这些媒体软件简直要逆天了!
- 声卡接口 LINE_IN、MIC_IN、LINE_OUT
- URL.createObjectURL()方法
- 阿里云网盘内测_阿里一口气推出两款网盘,不限速!
- jq 修改元素css伪类样式
- 4-Elasticsearch字段类型
- 视频画面有黑边怎么办?三招视频画面大小裁剪的方法教给你
- js解决chrome浏览器无法自动播放音频
- 675_AUTOSAR_TR_Methodology_文档阅读2
- 丹尼带你入坑无人机1 - 认识无人机(四轴)