技术推荐

自定义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

【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架的更多相关文章

  1. PS抠发丝技巧 「选择并遮住…」

    PS抠发丝技巧 「选择并遮住…」 现在的海报设计,大多数都有模特MM,然而MM的头发实用太多了,有的还飘起来…… 对于设计师(特别是淘宝美工)没有一个强大.快速.实用的抠发丝技巧真的混不去哦.而PS ...

  2. [Maven实战-许晓斌]-[第二章]-2.1在Windows上安装maven

    来源:<maven实战>   1.检查JAVA_HOME和java -version C:\Users\admin>echo %JAVA_HOME% C:\Users\admin&g ...

  3. IDEA通过Maven WebApp archetype 创建Spring boot项目骨架

    springboot项目资源: GitHub地址:https://github.com/TisFreedom/springbootdome.git 码云地址:https://gitee.com/Tis ...

  4. 【Maven实战技巧】「插件使用专题」Maven-Assembly插件实现自定义打包

    前提概要 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...

  5. ☕【Java技术指南】「并发编程专题」针对于Guava RateLimiter限流器的入门到精通(含实战开发技巧)

    并发编程的三剑客 在开发高并发系统时有三剑客:缓存.降级和限流. 缓存 缓存的目的是提升系统访问速度和增大系统处理容量. 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题 ...

  6. 🏆【Java技术专区】「探针Agent专题」Java Agent探针的技术介绍(1)

    前提概要 Java调式.热部署.JVM背后的支持者Java Agent: 各个 Java IDE 的调试功能,例如 eclipse.IntelliJ : 热部署功能,例如 JRebel.XRebel. ...

  7. 「mysql优化专题」90%程序员没听过的存储过程和存储函数教学(7)

    一.MYSQL储存过程简介(技术文): 储存过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时 ...

  8. 🏆【Alibaba工具型技术系列】「EasyExcel技术专题」摒除OOM!让你的Excel操作变得更加优雅和安全

    前提概要 针对于后端开发者而言的,作为报表的导入和导出是一个很基础且有很棘手的问题!之前常用的工具和方案大概有这么几种: JXL(Java Excel API 工具服务),此种只支持xls的文件格式, ...

  9. 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)

    一.为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接.连接有两个,一个是客户端与后端的连接,另一个是后端与数据库的连接.简单如图下两个蓝色框框(其实,这张图是我在悟空问答 ...

随机推荐

  1. 前端面试手写代码——JS数组去重

    目录 1 测试用例 2 JS 数组去重4大类型 2.1 元素比较型 2.1.1 双层 for 循环逐一比较(es5常用) 2.1.2 排序相邻比较 2.2 查找元素位置型 2.2.1 indexOf ...

  2. jQuery中onload与ready区别

    onload和ready的区别document.ready和onload的区别为:加载程度不同.执行次数不同.执行速度不同.1.加载程度不同 document.ready:是DOM结构绘制完毕后就执行 ...

  3. 当src获取不到图片,onerror可指定一张默认的图片

    <img src="img/789.png" onerror="javascript:this.src='img/123.png';" alt=" ...

  4. centos7 使用iptables

    关闭selinux,不关闭时,iptables不读取配置文件 重启生效 centos7 中默认的防火墙是firewalld,使用iptables需要先关闭firewalld防火墙,安装iptables ...

  5. @PostConstruct和static静态块初始化的区别

    static blocks are invoked when the class is being initialized, after it is loaded. The dependencies ...

  6. java语言方法中定义final类型的入参有什么用意?

    无论参数是基本数据类型,还是引用数据类型,只要加了final,不好意思,该参数不可以再赋值(实参传进来给形参,就相当于初始化完成).可以防止在方法里面不小心重新赋值,造成一些不必要的麻烦!!!参考:h ...

  7. 全程精髓无废话,腾讯强推Redis深度笔记我粉了

    作为目前主流的NoSQL技术,redis在Java互联网中得到了非常广泛的使用,个时代码代码的秃头人员,对Redis肯定是不陌生的,如果连Redis都没用过,还真不好意思出去面试,指不定被面试官吊打多 ...

  8. php简单手机商品发布系统

    原本还说学学angular2的,没想到上一公司呆了两月就走了,现在在这个公司做了一个小型的商品发布系统,,php实现的,比较简单,功能不多,是以手机模板发布商品网站的,需要的可以拿去 http://p ...

  9. 四、Zookeeper3.7安装

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS 三.MapReduce编程实例 Zookeeper安装 @ 目录 前文 Zooke ...

  10. spring security 认证源码跟踪

    spring security 认证源码跟踪 ​ 在跟踪认证源码之前,我们先根据官网说明一下security的内部原理,主要是依据一系列的filter来实现,大家可以根据https://docs.sp ...